思路:
简单的回文串的判断,有以下几个操作需要进行
(1)将大小写字母统一成大写或者小写。
(2)删除非字母字符(不一定要做)。
(3)判断剩余字符串是否是回文。
使用isalpha()函数判断字符是否是字母,使用tolower()函数强制将字符改为小写,使用sgood.rbegin(), sgood.rend()扭转字符串,然后将新字符串和老字符串进行比较,比较偷懒的做法。
class Solution {
public:
bool isPalindrome(string s) {
string sgood;
for (char ch : s) {
if (isalpha(ch)) {
sgood += tolower(ch);
}
}
string sgood_rev(sgood.rbegin(), sgood.rend());
return sgood == sgood_rev;
}
};
如果我们我们不偷懒,那么需要使用双指针,左指针在最前,右指针在最后。两边的指针如果遇到不是字符的数就移动,然后进行比较,这里需要处理的是,如果字符是偶数和奇数的时候,怎么去设定终止条件,这里的终止条件最好写为left<right这样不管是怎么样,判断完最后两个数后,left只能>=right,这样偶数和奇数就不影响结果了。
class Solution {
public:
bool isPalindrome(string s) {
int n = s.size();
int left = 0, right = n - 1;
while (left < right) {
while (left < right && !isalnum(s[left])) {
++left;
}
while (left < right && !isalnum(s[right])) {
--right;
}
if (left < right) {
if (tolower(s[left]) != tolower(s[right])) {
return false;
}
++left;
--right;
}
}
return true;
}
};