简单题,处理好什么时候跳过,什么时候转换就行:
class Solution {
public:
bool isPalindrome(string s) {
int n = s.size();
if(n < 2) return true;
int i = 0, j = n-1;
while(i < j){
while(i < j && !isalnum(s[i])) ++i;//不是字母或者数字
while(i < j && !isalnum(s[j])) --j;
if(tolower(s[i]) != tolower(s[j])) return false;//tolower()对数字会原样输出
else{
++i; --j;
}
}
return true;
}
};
当然也可以先处理字符串,把空格标点啥的全部去掉,大写转化为小写,最后翻转字符串比较即可。