[LeetCode] 125_验证回文串
题目要求
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true
示例 2:
输入: “race a car”
输出: false
题目分析
- 设置i和j,分别指向字符串的两头,因为回文串本质上是对称。
- 当i<j时,一直循环,使i和j分别停在下一个需要比较的字符上
- 如果字符不相等,说明错误,如果相等,继续判断
注意点
- 注意i和j的增减方向
- 可以在判断是否需要比较的时候将大写字母都转变为小写字母
代码
class Solution {
public:
bool needcheck(char &c){
if(c>='a' && c<='z')return true;
if(c>='A' && c<='Z'){
c=c-'A'+'a';
return true;
}
if(c>='0' && c<='9')return true;
return false;
}
bool isPalindrome(string s) {
int i=0,j=s.length()-1;
while(i<j){
while(!needcheck(s[i]) && i<j)++i;
while(!needcheck(s[j]) && i<j)--j;
if(i>=j)break;
if(s[i++]!=s[j--])return false;
}
return true;
}
};