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 recurjudge(string s, int begin, int end)
{
while(begin<=end&&begin<s.size()&&end>=0){
while (begin<s.size())
{
bool flag = (s[begin] >= '0'&&s[begin] <= '9')||(s[begin] >= 'a'&&s[begin] <= 'z')||(s[begin] >= 'A'&&s[begin] <= 'Z');
if(!flag)
++begin;
else
break;
}
while (end >= 0)
{
bool flag = (s[end] >= '0'&&s[end] <= '9')||(s[end] >= 'a'&&s[end] <= 'z')||(s[end] >= 'A'&&s[end] <= 'Z');
if(!flag)
--end;
else
break;
}
if (begin <= end){
if (s[begin] >= 'A'&&s[begin] <= 'Z')
s[begin] = s[begin] - ('A' - 'a');
if (s[end] >= 'A'&&s[end] <= 'Z')
s[end] = s[end] - ('A' - 'a');
if (s[begin] == s[end]){
++begin;
--end;
}
else
return false;
}
}
return true;
}
bool isPalindrome(string s) {
if(s.empty())
return true;
return recurjudge(s, 0, s.size() - 1);
}
};