描述:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
解法: 字符串中可能含有其他的字符,我们从字符串的两头开始索引,如果左边的字符不是字母或者数字字符,那么让左边先走一步,同理右边的也一样。如果两边字符相同,那么左边和右边同时走一步,直到左边的大于右边结束。在这个过程中,如果有左右两边的字符不相等的话,那么失败返回,否则就是回文串。
代码如下:
public boolean isPalindrome(String s) {
if(s == null)
return false;
if("" == s || s.length() == 0)
return true;
s = s.toLowerCase();
char[] c = s.toCharArray();
int l = 0, h = c.length-1;
while(l<=h){
char cl = c[l];
char cr = c[h];
if(!((cl >= 'a' && cl <= 'z') || (cl >= '0' && cl <= '9'))){
l++;
continue;
}
if(!((cr >= 'a' && cr <= 'z') || (cr >= '0' && cr <= '9'))){
h--;
continue;
}
if(cl == cr){
l++;
h--;
}else{
return false;
}
}
return true;
}