leetcode-680验证回文串

107 阅读1分钟

题目

image.png leetcode

解题思路

  1. 从字符串左右两头进行验证,如果s[left] ==s[right],则left++,right--继续向中间靠拢,否则返回false
  2. 由于该题目可以从中删除一个字符,当s[left] !== s[right]时需要再有一次机会,所以需要再进行一次s[left+1]?= s[right]或者s[left] ?= s[right-1]的验证。 我们可以定义一个判断是否为回文字符串的函数(这个函数可以直接解决leetcode-5),然后调用它。
  3. 最终都验证完成了返回true即可

JavaScript代码

var validPalindrome = function(s) {
  // 判断回文字符串
  function isPalindrome(left, right) {
    while (left < right) {
      if (s[left] !== s[right]) {
        return false;
      }
      left++;
      right--;
    }
    return true;
  }

  let left = 0,
    right = s.length - 1;

  while (left < right) {
    if (s[left] !== s[right]) {
      // 这里已经检查出不是回文了,相当于再给一次机会检查剩余的是否为回文字符串
      return isPalindrome(left + 1, right) || isPalindrome(left, right - 1);
    }
    left++;
    right--;
  }
  return true;
};