【Leetcode】680. 验证回文字符串 Ⅱ

431 阅读1分钟

题意描述

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

示例 1:

输入: "aba" 输出: True 示例 2:

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

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

解题思路:

前后字符比较,直到字符串中间位置

1)若一直没有碰到前后字符不相等的情况,则字符串本身就是回文串

2)碰到前后字符不相等的情况,去掉前一个字符或者去掉后一个字符,判断是否是回文串

class Solution {
    public boolean validPalindrome(String s) {
        if (s == null || s.isEmpty()) {
            return true;
        }
        int len = s.length();
        for (int i = 0; i < len/2; i++) {
            if (s.charAt(i) != s.charAt(len-i-1)) {
                if (isValid(s, i, len-i-2)) {
                    return true;
                } else if (isValid(s, i+1, len-i-1)) {
                    return true;
                } else {
                    return false;
                }
            }
        }
        return true;
    }

    private boolean isValid(String s, int start, int end) {
        while (start <= end) {
            if (s.charAt(start++) == s.charAt(end--)) {
                continue;
            } else {
                return false;
            }
        }
        return true;
    }
}