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

136 阅读1分钟

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

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

思路:贪心算法,找到一个结果直接返回啦,删除最左边一个,删除最右边一个,如果不满回文字符串,则进一步删除最左一个,删除最右边一个,直到出现一次满足条件的为止

固定了一个字符串后,如果判断是否是回文字符串呢???

使用双指针法则,但凡找到了对称的两个值不相等,直接返回false

function checkPalindrome(s, i, j) {
  while (i < j) {
    if (s[i] != s[j]) return false;
    i++;
    j--;
  }
  return true;
}

var validPalindrome = function (s) {
  var left = 0;
  var right = s.length - 1;
  while (left < right) {
    if (s[left] == s[right]) {
      ++left;
      --right;
    } else {
      return (
        checkPalindrome(s, left, right - 1) ||
        checkPalindrome(s, left + 1, right)
      );
    }
  }
  return true;
};