思路:设置双指针分别指向字符串的左右两端,判断两个指针是否都指向字符或数字,如果是,再去判断大小写字母情况。
public boolean isPalindrome(String s) {
int left=0;
int right=s.length()-1;
while(left<right){
while(left<right&&!isLetterOrDigit(s.charAt(left))) left++;
while(left<right&&!isLetterOrDigit(s.charAt(right))) right--;
if(toLowerCase(s.charAt(left)).equals(toLowerCase(s.charAt(right)))){
left++;
right--;
}
else return false;
}
return true;
}
private boolean isLetterOrDigit(char c){
if((c>='0'&&c<='9')||(c>='A'&&c<='Z')||(c>='a'&&c<='z')) return true;
else return false;
}
private Character toLowerCase(char c){
if(c>='A'&&c<='Z'){
return (char)(c+32);
}
return c;
}