在数据结构中,回文问题是很常见的问题,下面关于回文,总结出了几套使用与基本回文判断的方法

方法一:StringBuffer中的reverse函数

  由于String类型没有reverse函数,所以需要将String类型转换为StringBuffer类型再进行使用,下面试验证英文回文字符串(去除非大小写字母和数字后的小写字符串)的方法

 int n = s.length();
        int i=0;
        StringBuffer x = new StringBuffer();
        while(i<n-1){
            if(Character.isLetterOrDigit(s.charAt(i))){
                x.append(Character.toLowerCase(s.charAt(i)));
            }
            i++;
        }
        StringBuffer x_reverses=  x.reverse();
        return x.toString().equals(x_reverses.toString());
 
  以上使用Character.isLittleOrDigit()方法判断是否为字母或者数字,使用Character.ToLowerCase将字母转换为小写

方法二:在原字符串上直接判断

使用双指针在原字符串上直接遍历,选中头尾判断是否相等,相等则++--直到left等于right,无脑操作没什么好讲的。

class Solution {
    public boolean isPalindrome(String s) {
        int n = s.length();
        int left = 0, right = n - 1;
        while (left < right) {
            while (left < right && !Character.isLetterOrDigit(s.charAt(left))) {
                ++left;
            }
            while (left < right && !Character.isLetterOrDigit(s.charAt(right))) {
                --right;
            }
            if (left < right) {
                if (Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right))) {
                    return false;
                }
                ++left;
                --right;
            }
        }
        return true;
    }
}