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.
两个指针首尾判断即可,跳过非字母数字字符,注意大小写,另外记住'A'要比'a'小32。代码如下:
class Solution {
public:
bool isPalindrome(string s) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
int len = s.length();
if(len <= 1)return true;
int i = 0, j = len - 1;
while(i <= j)
{
if(isAlphanumeric(s[i]) == false)
i++;
else if(isAlphanumeric(s[j]) == false)
j--;
else
{
if(isSame(s[i], s[j]) == true)
{i++; j--;}
else return false;
}
}
return true;
}
bool isAlphanumeric(char c)
{
if((c >= 'a' && c <= 'z')||(c >= 'A' && c <= 'Z')||(c >= '0' && c <= '9'))
return true;
else return false;
}
bool isSame(char a, char b)
{
if(a >= 'A' && a <= 'Z')
a += 32;
if(b >= 'A' && b <= 'Z')
b += 32;
return a == b;
}
};