题目
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
Note:
For the purpose of this problem, we define empty string as valid palindrome.
Example1:
Input: "A man, a plan, a canal: Panama"
Output: true
Example2:
Input: "race a car"
Output: false
思路
该题实际就是在最常规的回文串判断中混入了其他字符干扰。针对这种干扰,首先取出其中的数字和英文字符存在临时字符串中,然后对临时字符串判断是不是回文串。题设认为字符串为空也是回文串,因此如果临时字符串为空,返回true。
代码
class Solution {
public:
bool isPalindrome(string s) {
int diff = 'A'-'a';
int size = s.size();
if(size==0)
return true;
string temp;
int flag=0;
for(int i=0;i<size;i++)
{
if((s[i]>='a'&&s[i]<='z')||(s[i]>='0'&&s[i]<='9'))
{
temp+=s[i];
}
else if(s[i]>='A'&&s[i]<='Z')
{
temp+=s[i]-diff;
}
}
size = temp.size();
if(size==0)
{
return true;
}
for(int i=0;i<size/2;i++)
{
if(temp[i]!=temp[size-1-i])
return false;
}
return true;
}
};