leetcode 680.验证回文字符串

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

示例 1:

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

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

左右如果相等那就继续比较,当左右不相等的时候,要么删除左边的一个再进行比较,要么删除右边的一个接着进行比较,例子:"abccbma",当比较到b和m的时候不相等了,这个时候要么删除b进行比较,要么删除m再进行比较。

 

解法一:

var validPalindrome = function (s) {
        let left = 0;
        let right = s.length -1
        while (left < right) {
            if(s[left] != s[right]){
                return check(left + 1,right) || check(left, right - 1) // false || true = true
            }
            left++
            right--
            return true
        }
        //判断删除后的字符串是否相等
        function check(left, right){
            while (left < right) {
                if(s[left] != s[right]) {
                    return false
                }
                left++
                right--
            }
            return true
        }
    }

不知道哪里错了

看看别人递归解法吧

const validPalindrome = (s, count = 0) => {
  for (let i = 0, j = s.length - 1; i < j; i++, j--) {
    if (s[i] === s[j]) {
      continue;
    }
    if (count > 0) {
      return false;
    }
    return validPalindrome(s.slice(i, j), count + 1) || validPalindrome(s.slice(i + 1, j + 1), count + 1);
  }
  return true;
};
不积跬步无以至千里
原文地址:https://www.cnblogs.com/lyt0207/p/12398082.html