题目
思路
- 用String下的spilt(regex)去除除英文外的符号,regex是正则表达式,[]内写要删除的符号,但返回值是一个String型数组。
- 用String下的join()方法将上面得到的String数组中的元素拼接成字符串,需要注意的是参数有两个,第一个是用什么字符连接,第二个是被连接的数组。
- 为了方便用双指针法判断回文串,我们将所有英文字母转换为小写或大写。这里用String下的toLowerCase(Locale.ROOT)方法转换为小写。
- 判断是否为回文串,这里为我们将判断的过程封装为一个方法,这样使得代码更加条理清晰,至于回文串的判断方法,在上一篇博客已经写过一次了,只是稍微有变化的是上次是一次判断过个字符串,这次是一个,方法都是用双指针法。
- 个别极端案例拎出来单独考虑,比如单个字符、空白字符串可直接判定为回文串。
代码
public class Solution {
/**
* @param s: A string
* @return: Whether the string is a valid palindrome
*/
public static boolean isPalindrome(String s) {
//1.去除多余符号
s=s.trim();
if(s.isEmpty()){//特例 当输入空白“ ”时,返回true
return true;
}
String[] str=s.split("[, .:]");
//2.拼接成字符串
String rs = String.join("",str);
//3.全部转换为小写或大写
rs=rs.toLowerCase(Locale.ROOT);
//4.判断是否为回文串
if(function(rs)){
return true;
}else {
return false;
}
}
public static boolean function(String str){
boolean loop=true;
for (int i = 0; i < str.length(); i++) {
int n=0;
int m= str.length()-1;
while (n<m){
if(str.charAt(n)==str.charAt(m)){
loop=true;
n++;
m--;
}else{
loop=false;
break;
}
}
}
return loop;
}
}
结果
不是最优解、但是…
通过就行吧…