题目:
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) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int i = 0;
int j = s.size()-1;
while(i<j)
{
while(!isAlpha(s[i]))
{
i++;
if(i>=s.size())
{
break;
}
};
while(!isAlpha(s[j]))
{
j--;
if(j<0)
{
break;
}
};
if(i<j&&!sameAlpha(s[i++],s[j--]))
{
return false;
}
};
return true;
}
bool isAlpha(char c)
{
if(c - 'a' >= 0 && c - 'a' < 26)
{
return true;
}
else if(c - 'A' >= 0 && c - 'A' < 26)
{
return true;
}
else if(c >= '0' && c <= '9')
{
return true;
}
else
{
return false;
}
}
bool sameAlpha(char c1, char c2)
{
if(c1 == c2)
{
return true;
}
else if(c1 - 'A' == c2 - 'a')
{
return true;
}
else if(c1 - 'a' == c2 - 'A')
{
return true;
}
else
{
return false;
}
}
};