文章目录
题目
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例1:
输入: “A man, a plan, a canal: Panama”
输出: true
示例2:
输入: “race a car”
输出: false
代码(并没有用c++的内置函数)
class Solution {
public:
//用于判断是字母还是数字,还是非法字符
int charac(char c)
{
if(((c-'A')>=0&&(c-'A')<=25)||((c-'A')>=32&&(c-'A')<=57))
{
return 1;
}
else if(((c-'0'>=0)&&(c-'0'<=9)))
return 2;
else
return 0;
}
bool isPalindrome(string s) {
int l=0,r=s.size()-1;
if (r<0)return false;
while(l<r){
//用于将非法字符排除
while(l<r&&(charac(s[l])==0))
l++;
while(l<r&&(charac(s[r])==0))
r--;
//只要有一个判断的是数字时,则只需判断两者是否相等
if((charac(s[l])==2||charac(s[r])==2)&&s[l]!=s[r])
return false;
//当两者均为字母时,需要需要判断是否为大小写以及是否相等,一旦既不是大小写又不相等,则不可能时回文串
if((charac(s[l])==1&&charac(s[r])==1)&&!((s[l]-32==s[r])||(s[r]-32==s[l]))&&(s[l]!=s[r]))
return false;
l++;
r--;
}return true;
}
};