【LeetCode】125. 验证回文串 [C++]
class Solution {
public:
bool isPalindrome(string s) {
int l=0,r=s.size()-1;
int p='a'-'A';
int flag=1;
while(l<=r)
{
while(1)
{
if(s[l]>='A'&&s[l]<='Z')
{
s[l]+=p;
break;
}
if(!(s[l]>='a'&&s[l]<='z'||s[l]>='0'&&s[l]<='9')&&l<r){
++l;
}
else break;
}
if(l<r)
while(1){
if(s[r]>='A'&&s[r]<='Z'){
s[r]+=p;
break;
}
if(!(s[r]>='a'&&s[r]<='z'||s[r]>='0'&&s[r]<='9')&&l<r){
--r;
}
else break;
}
if(l==r&&!(s[r]>='a'&&s[l]<='z'||s[l]>='0'&&s[l]<='9')&&!(s[r]>='a'&&s[r]<='z'||s[r]>='0'&&s[r]<='9'))
{
break;
}
if(s[l]!=s[r])
{
flag=0;
break;
}
--r;
++l;
}
return flag;
}
};
O(n)做法,左右双直至,过滤大写字母和符号,只判断小写字母,当有不一样的时候则返回不符合。

浙公网安备 33010602011771号