剑指 Offer II 019. 最多删除一个字符得到回文(680. 验证回文串 II)

题目:

 

思路:

【1】基于回文字符串的思维,采用双指针,如果字符相同就两个都移动,那么如果不同呢,那么就是要才去其中一个去除掉。其实用递归比较合适,只要设置一个标志位就可以了(可以考虑int类型),哈哈,如果变化成删除多个,就改一下标志位。

代码展示:

基于回文字符串思维的方式:

//时间4 ms击败100%
//内存42.4 MB击败9.55%
//时间复杂度:O(n),其中 n 是字符串的长度。
//判断整个字符串是否是回文字符串的时间复杂度是 O(n),遇到不同字符时,判断两个子串是否是回文字符串的时间复杂度也都是 O(n)。
//空间复杂度:O(1)。只需要维护有限的常量空间。
class Solution {
    public boolean validPalindrome(String s) {
        return toValidPalindrome(s,0, s.length()-1,false);
    }

    public boolean toValidPalindrome(String s, int low, int high,Boolean tag) {
        while (low < high) {
            char c1 = s.charAt(low), c2 = s.charAt(high);
            if (c1 == c2) {
                ++low;
                --high;
            } else {
                if (!tag) return toValidPalindrome(s, low, high - 1,true) || toValidPalindrome(s, low + 1, high,true);
                return false;
            }
        }
        return true;
    }
}

 

posted @ 2023-03-01 11:44  忧愁的chafry  阅读(24)  评论(0编辑  收藏  举报