Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
For example,
"A man, a plan, a canal: Panama"
is a palindrome.
"race a car"
is not a palindrome.
在字符串前后各设一个指针,每次指向的先判别是否字母或数字,如果是小写字母则转为大写字母,再判别当前两个指针所指向的字符是否一样,若不一样则不为回文串,跳出比较,若一样则前后指针再查找下一组字符,终止条件为前指针>=后指针。
class Solution {
public:
bool isPalindrome(string s) {
int len = s.length();
int i = 0, j = len - 1;
bool flag = 1;
while(i < j){
while(i < j){
if(s[i] >= 'A' && s[i] <= 'Z')break;
if(s[i] >= '0' && s[i] <= '9')break;
if(s[i] >= 'a' && s[i] <= 'z'){
s[i] -= 32;
break;
}
i++;
}
while(j > i){
if(s[j] >= 'A' && s[j] <= 'Z')break;
if(s[j] >= '0' && s[j] <= '9')break;
if(s[j] >= 'a' && s[j] <= 'z'){
s[j] -= 32;
break;
}
j--;
}
if(s[i] != s[j]){flag = 0; break;}
i++,j--;
}
return flag;
}
};