题目
思路
用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; } }
结果
不是最优解、但是…
通过就行吧…