双指针一前一后,往中间遍历对比,跳过非字母和数字的字符。
class Solution {
public:
bool isPalindrome(string s) {
if (s.empty()) return true;
int left = 0, right = s.length() - 1;
while (left < right)
{
if (!isDigitOrLetter(s[left])) ++ left; //跳过其他字符
else if (!isDigitOrLetter(s[right])) -- right;
else
{
if (tolower(s[left]) != tolower(s[right])) return false;
++ left, -- right;
}
}
return true;
}
//判断字符是否是数字或字母,也可以用库函数isalnum()替代
bool isDigitOrLetter(char ch)
{
if (ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z')
return true;
return false;
}
};