offer2-19


给定一个非空字符串 s,请判断如果 最多 从字符串中删除一个字符能否得到一个回文字符串。

示例 1:

输入: s = "aba"
输出: true

示例 2:

输入: s = "abca"
输出: true
解释: 可以删除 "c" 字符 或者 "b" 字符

示例 3:

输入: s = "abc"
输出: false

提示:

  • 1 <= s.length <= 105
  • s 由小写英文字母组成

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public boolean validPalindrome(String s) {
        if (s == null || s.length() == 0) {
            return true;
        }

        int start = 0;
        int end = s.length() - 1;
        boolean used = false;
        int startTemp = -1;
        int endTemp = -1;

        while (start < end) {
            if (s.charAt(start) != s.charAt(end)) {
                if (!used) {
                    if (startTemp == -1) {
                        startTemp = start;
                        endTemp = end;
                        start++;
                        continue;
                    } else {
                        start = startTemp;
                        end = endTemp;
                        end--;
                        used = true;
                        continue;
                    }
                } else {
                    return false;
                }
            }
            start++;
            end--;
        }

        return true;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

文章作者: 倪春恩
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 倪春恩 !