给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama" 输出: true
示例 2:
输入: "race a car" 输出: false
【思路】
两个指针分别从头和尾开始遍历判断,如果不是字母和数字则continue;若是,则判断两个字符是否相等,不相等直接返回false.
这里不区分大小写,所以大写字母统一转小写;或者小写转大写,再比较。
class Solution {
public:
bool isPalindrome(string s) {
int left=0;
int right=s.size()-1;
if(s.empty())
return true;
while(left<right)
{
if(!isAlphaNum(s[left])) ++left;
else if(!isAlphaNum(s[right])) --right;
else if((s[left]+32-'a')%32!=(s[right]+32-'a')%32)//大写字母转小写后比较
return false;
else{
++left;
--right;
}
}
return true;
}
bool isAlphaNum(char &ch) {
if (ch >= 'a' && ch <= 'z') return true;
if (ch >= 'A' && ch <= 'Z') return true;
if (ch >= '0' && ch <= '9') return true;
return false;
}
};