剑指 Offer II 019. 最多删除一个字符得到回文

49 阅读1分钟

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

 

示例 1:

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

示例 2:

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

示例 3:

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

 

提示:

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

题解:

/**
 * @param {string} s
 * @return {boolean}
 */
var validPalindrome = function (s) {
    let low = 0, high = s.length - 1
    // 双指针判断是否是回文串
    while (low < high) {
        let c1 = s[low], c2 = s[high]
        if (c1 == c2) {
            low++
            high--
        } else {
            // 如果不是分别获取从low +1 或者 从hight-1 判断是否是回文串
            return methodHandler(s, low + 1, high) || methodHandler(s, low, high - 1)
        }
    }
    return true

};

var methodHandler = (s, low, high) => {
    for (let i = low, j = high; i < j; ++i, --j) {
        let c1 = s[i], c2 = s[j]
        if (c1 != c2) {
            return false;
        }
    }
    return true;
}