每日一题-简单-验证回文串II(680)

126 阅读1分钟

题目: 给你一个字符串 s最多 可以从中删除一个字符。请你判断 s 是否能成为回文字符串:如果能,返回 true ;否则,返回 false 。

示例 :

输入:s = "abca"
输出:true
解释:你可以删除字符 'c'

🙇‍♂️ 感想: 判断是否是回文,左右两边相等即是回文。可以删除一个字符再去判断是否是回文。

🙇‍♂️ 解题思路: 左右两个指针,分别判断左右两个指针指向的数字是否相等,如果不相等,则删除其中一个字符再去判断,是否是回文,是返回true,否返回false

var validPalindrome = function(s) {
  if (isPalindrome(s)) return true
  let left = 0
  let right = s.length - 1
  while(left <= right) {
    if (s[left] !== s[right]) {
      if (left === 0) {
        if (isPalindrome(s.substring(left + 1))) {
          return true
        }
      }
      if (right === s.length - 1) {
        if (isPalindrome(s.substring(0, right))) {
          return true
        }
      } else if (isPalindrome(s.substring(0, left) + s.substring(left + 1, right) + s.substring(right))) { // 删 left
        return true
      } else if (isPalindrome(s.substring(0, left) + s.substring(left, right) + s.substring(right + 1))) { // 删right
        return true
      } else {
        return false
      }
    }
    left++
    right--
  }
  return false
};
function isPalindrome (s) {
  let left = s.substring(0, Math.ceil(s.length / 2))
  let right = s.substring(Math.floor(s.length / 2)).split('').reverse().join('')
  console.log(s, left, right)
  return left === right
}