题目描述
判断题目给出的字符串是不是回文,仅考虑字符串中的字母字符和数字字符,并且忽略大小写
例如:"A man, a plan, a canal: Panama"是回文
"race a car"不是回文
注意:
你有没有考虑过字符串可能为空?这是面试时应该提出的一个好问题。
针对这个问题,我们定义空字符串是回文
class Solution {
public:
bool isPalindrome(string s) {
string res;
for(int i=0;i<s.size();i++)
{
if(is_dight(s[i])||is_a(s[i])||is_A(s[i]))
res+=s[i];
}
for(int i=0;i<res.size()/2;i++)
{
if(res[i]!=res[res.size()-i-1]) //前后字符不匹配
{
if(is_a(res[i])) //前面是小写字母
{
if(is_A(res[res.size()-i-1])) //后面是大写字母
{
if(res[i]!=res[res.size()-i-1]+32)
return false;
}
else
{
return false;
}
}
else if(is_A(res[i])) //前面是大写字母
{
if(is_a(res[res.size()-i-1])) //后面是小写字母
{
if(res[i]!=res[res.size()-i-1]-32)
return false;
}
else
{
return false;
}
}
else //是数字
{
return false;//那么一定不是回文串
}
}
}
return true;
}
bool is_dight(char s)
{
if('0'<=s && s<='9')
return true;
else
return false;
}
bool is_A(char s)
{
if('A'<=s && s<='Z')
return true;
else
return false;
}
bool is_a(char s)
{
if( 'a'<=s && s<='z' )
return true;
else
return false;
}
};