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 size = s.length();
if(s.empty()) return true;
for(int l = 0, r = size - 1; l <= r; ){
if(isalnum(s[l]) && isalnum(s[r])){
if(tolower(s[l]) != tolower(s[r]))
return false;
++l; --r;
} else if(isalnum(s[l]))
--r;
else if(isalnum(s[r]))
++l;
else {
++l; --r;
}
}
return true;
}
};
class Solution {
public:
bool isAlphaC(char ch){
return ('a' <= ch && ch <= 'z') || ('0' <= ch && ch <= '9');
}
bool isPalindrome(string s) {
if(s.empty()) return true;
int l, r;
l = 0, r = s.length() - 1;
bool ret = true;
while(l < r){
char ch1 = s[l], ch2 = s[r];
if('A' <= ch1 && ch1 <= 'Z') ch1 = ch1 - 'A' + 'a';
if('A' <= ch2 && ch2 <= 'Z') ch2 = ch2 - 'A' + 'a';
if(isAlphaC(ch1) && isAlphaC(ch2)){
if(ch1 == ch2){
++l;
--r;
} else {
ret = false;
break;
}
} else if(isAlphaC(ch1))
--r;
else if(isAlphaC(ch2))
++l;
else {
++l;
--r;
}
}
return ret;
}
};