解题思路:两个指针,一开始分别指向头和尾,对于两个指针所指的都是字母的情况进行判断,如果二者不相等并且相差的ASCI码绝对值也不是32,返回false。这里有个加快运行时间的技巧是不要先把所有的非字母和数字的字符去掉或者把大写转为小写,直接在运行中一个个来判断,因为有可能还未判断完所有的字符已经返回false了。如果一开始就全部处理了显然做了很多无用功。最终击败数目93.68%,创了我的新高。
public class Solution {
public boolean isPalindrome(String s) {
if(s.length() < 2) {
return true;
}
int i = 0;
int j = s.length() - 1;
while(i < j) {
char c = s.charAt(i);
char cc = s.charAt(j);
if(isValid(c)) {
if(isValid(cc)) {
if(c != cc && Math.abs(c - cc) != 32) {
return false;
}
i++;
j--;
}
else {
j--;
}
}
else if(isValid(cc)) {
i++;
}
else {
i++;
j--;
}
}
return true;
}
public boolean isValid(char c) {
if(c >= 'a' && c <= 'z') return true;
if(c >= 'A' && c <= 'Z') return true;
if(c >= '0' && c <= '9') return true;
return false;
}
}