题目描述
思路分析
双指针/枚举
前后两个指针,跳过不合法字符,然后对比字符,移动指针即可。
代码实现
class Solution {
public:
bool isPalindrome(string s) {
int l=0,r=s.size()-1;
bool res=true;
while(l<r){
while(l<s.size()&&!isalpha(s[l])&&!isdigit(s[l])) l++;
while(r>=0&&!isalpha(s[r])&&!isdigit(s[r])) r--;
bool eql=isdigit(s[l])&&isdigit(s[r])&&s[l]==s[r]||isalpha(s[l])&&isalpha(s[r])&&(tolower(s[l])==tolower(s[r]));
if(l>=r) break;
else if(!eql){
res=false;
break;
}
l++,r--;
}
return res;
}
};