给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
题解:
- 双指针,过滤掉非字母和数字的字符
- 原来在 'Z' 到 'a' 中间还有6个字符
class Solution {
public boolean isPalindrome(String s) {
int l=0, r=s.length()-1;
while(l<r){
//不在'0'到'9'且不在'A'-'Z','a'-'z',
while(l<r &&(s.charAt(l)<'0' || (s.charAt(l)>'9'&&s.charAt(l)<'A') || (s.charAt(l)>'Z'&&s.charAt(l)<'a') || s.charAt(l)>'z')){
l++;
}
while(l<r &&(s.charAt(r)<'0' || (s.charAt(r)>'9'&&s.charAt(r)<'A') || (s.charAt(r)>'Z'&&s.charAt(r)<'a') || s.charAt(r)>'z')){
r--;
}
if((s.charAt(l)>='0' && s.charAt(l)<='9') || (s.charAt(r)>='0' && s.charAt(r)<='9')){
//为数字字符之间比较,无大小写
if(s.charAt(l)!=s.charAt(r)){
return false;
}
}else{
//为字母字符之间比较,有大小写之分
int diff = Integer.valueOf(s.charAt(l))-Integer.valueOf(s.charAt(r));
if(diff!=0 && Math.abs(diff)!=32){
return false;
}
}
l++;
r--;
}
return true;
}
}