验证回文串

问题陈述

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

**说明:**本题中,我们将空字符串定义为有效的回文串。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution{
public boolean isPalindrome(String s){
if(s==null||s.length()==0) return true;
s=s.toLowerCase();
for(int i=0,j=s.length()-1;i<j;i++,j--){//注意多条件for循环表达式写法,冒号只出现两次
while(i<j && !Character.isLetterOrDigit(s.charAt(i))){
i++;
}
while(i<j && !Character.isLetterOrDigit(s.charAt(j))){
j--;
}
if(s.charAt(i)!=s.charAt(j)){
return false;
}
}
return true;
}
}

另解:

1
2
3
4
5
6
public boolean isPalindrome(String s) {
String actual = s.replaceAll("[^A-Za-z0-9]", "").toLowerCase();//正则表达式匹配
String rev = new StringBuffer(actual).reverse().toString();
return actual.equals(rev);
}