算法萌新闯力扣:验证回文串

    力扣热题:验证回文串

开篇

  回文字符串的题目挺常见的,方法八九不离十,只要掌握一两个常用方法,这种类型题就是手到擒来。

题目链接:125.验证回文串

题目描述

代码思路

1.先利用toLowerCase()方法把字符串里的大写字符全部变成小写字符
2.然后进行判断,把不符合题目要求的字符进行删除。注意:String字符串是不能修改的,所以要使用StringBuffer字符串
3.最后用双指针判断字符串是否是回文字符串

代码纯享版

class Solution {
    public boolean isPalindrome(String s) {
        s = s.toLowerCase();
        StringBuffer str = new StringBuffer(s);
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) >= '0' && str.charAt(i) <= '9' || str.charAt(i) >= 'a' && str.charAt(i) <= 'z') ;
           else {
                str.delete(i, i + 1);
                i--;
            }
        }
        if (str.length() <= 1) return true;
        int left = 0, right = str.length() - 1;
        while (left < right) {
            if (str.charAt(left) != str.charAt(right)) return false;
            left++;
            right--;
        }
        return true;
    }
}

官方题解

1.将符合要求的字符放到另外一个字符串,然后对这个字符串利用reverse()进行反转,然后用equals方法对进行比较
isLetterOrDigit():它属于Character类。这个方法接收一个字符作为参数,然后返回一个布尔值,表示该字符是否是字母或数字。如果字符是字母或数字,则返回true;否则返回false。
toStrong:用于返回对象的字符串表示形式

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());
    }
}

2.上半部分与方法1相同,下半部分和我的方法一样用了双指针

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));
            }
        }
        int n = sgood.length();
        int left = 0, right = n - 1;
        while (left < right) {
            if (Character.toLowerCase(sgood.charAt(left)) != Character.toLowerCase(sgood.charAt(right))) {
                return false;
            }
            ++left;
            --right;
        }
        return true;
    }
}

3.在原字符串上进行判断

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;
    }
}

结语

  通过这么多种解法,大伙对回文字符串的判断应该有更深刻的认识吧。点个关注,我会每天分享力扣题目,与大家一同进步。

你可能感兴趣的:(Java算法,算法,leetcode,职场和发展,java,数据结构)