680. 验证回文字符串 Ⅱ

176 阅读1分钟

题目

image.png

思路

  • 以"abdda"这个串为例,此时i指向'b',j指向'd',发现不对了。
  • 但是有一次删除的机会,此时子串范围为(i+1, j)或(i, j-1)的俩子串只要有任意一个是回文串,则结果就是回文串,否则就不是。

代码

class Solution {
    public boolean validPalindrome(String s) {
        int i = 0, j = s.length() - 1;
        while (i < j) {
            if (s.charAt(i) != s.charAt(j)) {
                return isPal(s, i + 1, j) || isPal(s, i, j - 1);//关键
            }
            i++;
            j--;
        }
        return true;
    }
    //判断是否是回文串
    public boolean isPal(String s, int start, int end) {
        int i = start, j = end;
        while (i < j) {
            if (s.charAt(i) != s.charAt(j)) {
                return false;
            }
            i++;
            j--;
        }
        return true;
    }
}