125. 驗證迴文串
給定一個字符串,驗證它是否是迴文串,只考慮字母和數字字符,可以忽略字母的大小寫。
說明:本題中,我們將空字符串定義爲有效的迴文串。
示例 1:
輸入: "A man, a plan, a canal: Panama"
輸出: true
示例 2:
輸入: "race a car"
輸出: false
——題目難度:簡單
class Solution {
public:
bool isPalindrome(string s) {
//將字母和數字字符單獨保存在str中
string str;
for(auto c : s) {
if(islower(c) || isdigit(c)) { //小寫字母和數字字符直接保存
str += c;
}else if(isupper(c)) { //大寫字母則轉化爲小寫字母再保存
str += (c+32);
}
}
int len = str.size();
if(len==0) return true;
int l = 0;
int r = len - 1;
while(l < r && str.at(l) == str.at(r)) {
l++;
r--;
}
if(l>=r) return true;
return false;
}
};
680. 驗證迴文字符串 Ⅱ
給定一個非空字符串 s,最多刪除一個字符。判斷是否能成爲迴文字符串。
示例 1:
輸入: "aba"
輸出: True
示例 2:
輸入: "abca"
輸出: True
解釋: 你可以刪除c字符。
注意:
字符串只包含從 a-z 的小寫字母。字符串的最大長度是50000。
——題目難度:簡單
class Solution {
public:
bool validPalindrome(string s) {
int l = 0;
int r = s.size() - 1;
while(l < r && s[l] == s[r]) {
l++;
r--;
}
if(l>=r) return true;
//模擬刪除一個字符的操作
int l1 = l + 1; //嘗試跳過 s[l]字符和 s[r]字符的判斷
int r1 = r; //並直接開始 s[l+1]字符和 s[r]字符的判斷
while(l1 < r1 && s[l1] == s[r1]) {
l1++;
r1--;
}
if(l1>=r1) return true;
int l2 = l; //嘗試跳過 s[l]字符和 s[r]字符的判斷
int r2 = r - 1; //並直接開始 s[l]字符和 s[r-1]字符的判斷
while(l2 < r2 && s[l2] == s[r2]) {
l2++;
r2--;
}
if(l2>=r2) return true;
return false;
}
};