先用 string.toLowerCase() 把所有大写字母变小写
然后定义两个指针,分别在头和尾,从两边向中间靠拢验证回文,靠拢的过程中跳过其余字符
自己的代码 2ms ,看答案有一部分人可以达到 1ms,差距在于 toLowerCase 和 charAt 两个方法的调用比自己写代码实现要慢一点。
自己的(2ms)
class Solution {
public boolean isPalindrome(String s) {
s = s.toLowerCase();
if(s.length() == 0)
return true;
int l = 0,r = s.length() - 1;
while(true){
while(true){
char c = s.charAt(l);
if((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z'))
break;
l ++;
if(l >= s.length())
return true;
}
while(true){
char c = s.charAt(r);
if((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z'))
break;
r--;
}
if(l >= r)
return true;
if(s.charAt(l) != s.charAt(r))
return false;
l++;
r--;
}
}
}