LeetCode 125. 验证回文串 && 680. 验证回文字符串 Ⅱ

Posted 菜鸡的世界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 125. 验证回文串 && 680. 验证回文字符串 Ⅱ相关的知识,希望对你有一定的参考价值。

125题:https://leetcode-cn.com/problems/valid-palindrome/

这个题就是一个很标准的验证回文字符串,但是这个字符串又有点不一样,它有数字,有大写,有小写,甚至还有空格和非数字字符,根据题目意思,空格,非数字符号是不会被纳入评价范围的,同时判定的时候也不区分大小写。所以我们首先先把字符串统一转成大写或者是小写,然后去除空格。在双指针判断的时候遇到 小于‘0’ 或者 大于‘9’且小于‘a’ 或者大于‘z’的情况下要直接将这边+1,寻找下一个位置。代码如下

class Solution {
    public boolean isPalindrome(String s) {
        if(s.length() == 0){
            return true;
        }
        s = s.toLowerCase();
        s = s.replaceAll(" ","");
        int left = 0;
        int right = s.length()-1;
        while(left < right){
            if(s.charAt(left) < ‘0‘ || (s.charAt(left) > ‘9‘ && s.charAt(left) < ‘a‘) || s.charAt(left) > ‘z‘){
                left++;
                continue;
            }
            if(s.charAt(right) < ‘0‘ || (s.charAt(right) > ‘9‘ && s.charAt(right) < ‘a‘) || s.charAt(right) > ‘z‘){
                right--;
                continue;
            }
            if(s.charAt(left) != s.charAt(right)){
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
}
执行用时 :18 ms, 在所有 Java 提交中击败了20.09%的用户
内存消耗 :40.2 MB, 在所有 Java 提交中击败了7.14%的用户
 
这个是2020年5月19日的每日一题,这个题关键在于怎么利用只能删除一个的条件,我们设定i为左边指针,j为右边指针,如果s.charAt(i) != s.charAt(j)的时候,我们需要去分别判定[i,j-1]和[i+1,j]这两个字符串中是否有一个是回文,如果是就直接返回true,否则返回false。
最终解出来的答案还可以,代码如下
class Solution {
    public boolean validPalindrome(String s) {
        int left = 0;
        int right = s.length()-1;
        while(left < right){
            if(s.charAt(left) != s.charAt(right)){
                return check(s,left+1,right) || check(s,left,right-1);
            }else{
                left++;
                right--;
            }
        }
        return true;
    }

    private boolean check(String s,int l, int r){
        int left = l;
        int right = r;
        while(left < right){
            if(s.charAt(left) != s.charAt(right)){
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
}
执行用时 :8 ms, 在所有 Java 提交中击败了89.55%的用户
内存消耗 :40.1 MB, 在所有 Java 提交中击败了6.67%的用户

以上是关于LeetCode 125. 验证回文串 && 680. 验证回文字符串 Ⅱ的主要内容,如果未能解决你的问题,请参考以下文章

前端与算法 leetcode 125. 验证回文串

LeetCode-125-验证回文串

LeetCode:验证回文串125

LeetCode 125. 验证回文串

LeetCode 125. 验证回文串

leetcode 125. 验证回文串