leetcode680-验证回文字符串II

原题

给定一个非空字符串 s最多删除一个字符。判断是否能成为回文字符串。

示例 1:

输入: "aba"
输出: True

示例 2:

输入: "abca"
输出: True
解释: 你可以删除c字符。

注意:

  1. 字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。

解法

思想

双指针,当遇到左右两个字符不等的时候,删除左边的,再继续判断是否相等,或删除右边的,再继续判断是否相等。

代码

class Solution {
    public boolean validPalindrome(String s) {
        int p1 = 0,p2 = s.length()-1;
        while(p1<=p2){
            if(s.charAt(p1)!= s.charAt(p2)){
                String reverse = new StringBuilder(s).reverse().toString();
                return s.substring(p1+1,p2+1).equals(reverse.substring(p1,p2)) || s.substring(p1,p2).equals(reverse.substring(p1+1,p2+1));
            }
            p1++;p2--;
        }
        return true;
    }
}

原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/leetcode680-%e9%aa%8c%e8%af%81%e5%9b%9e%e6%96%87%e5%ad%97%e7%ac%a6%e4%b8%b2ii/