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.
Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.
For the purpose of this problem, we define empty string as valid palindrome.
class Solution {
public:
bool isPalindrome(string s) {
string::iterator it = s.begin();
while(it != s.end()) {
if((*it >= 'a' && *it <= 'z')
|| (*it >= 'A' && *it <= 'Z')
|| (*it >= '1' && *it <= '9')) it++;
else it = s.erase(it);
}
int n = s.size();
if(n == 0) return true;
if(n == 1) return true;
for(int i = 0; i <= n/2; ++i) {
if(down(s[i]) != down(s[n-i-1])) return false;
}
return true;
}
char down(char c) {
if(c <= 'Z') return c;
else return c - ('a' - 'A');
}
};
欢迎关注微信公众号——计算机视觉: