码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-05-19 10:44:15      阅读:44      评论:0      收藏:0      [点我收藏+]

标签:ace   span   https   else   int   lower   直接   就是   字符串   

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. 验证回文字符串 Ⅱ

标签:ace   span   https   else   int   lower   直接   就是   字符串   

原文地址:https://www.cnblogs.com/ZJPaang/p/12915372.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!