给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama" 输出: true
示例 2:
输入: "race a car" 输出: false
注意读题,题目中说了只考虑字母和数字,对于别的字符如空格,特殊字符等都忽略不算。因此当遇到一个不需要考虑的字符时,需要找到下一个要考虑的字符,再进行比较。另外注意全是特殊字符的字符串也算是回文串。
对于大写字母,需要用Character.toLowerCase转为小写字母。
判断回文串的题目,一般都是双指针,l,r,分别指向左右两端的字符,s[l]!=s[r]的话,return false即可。
class Solution {
char tolow(char a){
if(a>='A'&a<='Z'){
return Character.toLowerCase(a);
}
return a;
}
public boolean isPalindrome(String s) {
if(s.length()<=0) return true;
int l=0;
int r=s.length()-1;
while(l<s.length()&&r>=0&&l<r){
char c1,c2;
c1=tolow(s.charAt(l));
c2=tolow(s.charAt(r));
while((c1<'a'||c1>'z')&&(c1<'0'||c1>'9')){
l++;
if(l>=s.length())return true;
c1=tolow(s.charAt(l));
}
while((c2<'a'||c2>'z')&&(c2<'0'||c2>'9')){
r--;
if(r<0)return true;
c2=tolow(s.charAt(r));
}
if(c1!=c2){
return false;
}
l++;
r--;
}
return true;
}
}