该题主要考察一些字符串API的使用
第一思路很简单:按照题目意思写就好
- 先把字符串中的所有字符小写
- 再遍历删除不需要的字符
- 最后双指针/栈/反转后比较 判断是不是回文串
class Solution {
public static boolean isPalindrome(String s) {
s=s.toLowerCase();//字符小写
StringBuffer str=new StringBuffer(s);//转成StringBuffer
for(int i=0;i<str.length();i++){
char ch=str.charAt(i);
if(!(ch>=65&&ch<=90||ch>=48&&ch<=57||ch>=97&&ch<=122)){
str=str.deleteCharAt(i);//非字母数字字符删除
i--;//注意删除后可能原来被删除的下标的字符如果是非数字字母字符会被忽略
}
}
for(int i=0,j=str.length()-1;i<j;i++,j--){
if(str.charAt(i)!=str.charAt(j)){//双指针遍历判断
return false;
}
}
return true;
}
}
最后附上官方题解:
class Solution { public boolean isPalindrome(String s) { StringBuffer sgood = new StringBuffer(); int length = s.length(); for (int i = 0; i < length; i++) { char ch = s.charAt(i); if (Character.isLetterOrDigit(ch)) {//判断是不是字母/数字 sgood.append(Character.toLowerCase(ch));//添加该字符的小写形式到字符串中 } } StringBuffer sgood_rev = new StringBuffer(sgood).reverse();//反转 return sgood.toString().equals(sgood_rev.toString());//判断是否相等 } }