第一种:暴力破解
我们首先打开LeetCode读题,发现里面有很多的非合法字符,比方说" "、","等,我们需要把他删掉,我可以通过判断截取的方式,如果是英文大小写字母或者不是数字我们就不添加到我们开辟的字符串中,如果是我们则添加进去。
最后,一个规整好的字符串和一个规整好后反转的字符串进行比较,我们因为没有去把所有字符转换大写或者小写统一,所以我们用String里面提供的方法来进行比较,有人就会问了?为什么不用==来比较了,==是比较值对吧,他是不能比较引用数据类型的,所以我们这里用到了equalsIgnoreCase()方法来比较,他能够忽略大小写。
class Solution {
public boolean isPalindrome(String s) {
String result = "";
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' || ch >= '0' && ch <= '9'){
result = result + ch;
}
}
String str = StrReversal(s);
if (result.equalsIgnoreCase(str)){
return true;
}
return false;
}
public static String StrReversal(String str){
String result = "";
for (int length = str.length() - 1; length >= 0; length--) {
char ch = str.charAt(length);
if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' || ch >= '0' && ch <= '9'){
result = result + ch;
}
}
return result;
}
}
第二种:优化 4ms
删掉非法字符,然后再把字符拼接出来,然后再反转,StringBuffer,StringBuffer的话里面有很多方法,比方说反转reverse(),StringBuffer转String的方法toString(),还有替换,添加等。我就不一一赘述了,那让我们看看代码吧
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 (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' || ch >= '0' && ch <= '9') {
sgood.append(ch);
}
}
StringBuffer sgood_rev = new StringBuffer(sgood).reverse();
return sgood.toString().equalsIngnoreCase(sgood_rev.toString());
}
}
我们可以看到,先调用了StringBuffer的空参构造,来创建一个StringBuffer的对象
然后用这个对象进行了非法字符的删除后添加,append方法然后对他进行了全部转换为小写字母,
最后对他进行反正,然后使用toString方法来进行比较。