【javascript 力扣刷题 680:验证回文字符串II】

504 阅读1分钟

本文我们解析力扣刷题第680题,验证回文字符串II 本题题解:在原有的"验证回文字符串I"中,本题需要给一次机会去删一个不回文的元素,并在删除后继续往下判断,到最后左右指针相等或者左指针在右指针的右边时,回文验证正确。

var validPalindrome = function(s) {
  //双指针解法,首先定首尾。
  let left = 0,right = s.length-1
  //其次进入到while循环当中。
  while(left<right){
    //先抓出两边指针不相同的特例
    if(s[left] !== s[right]){
      //由于本题需要给一次删除元素的机会,我们可以理解为,我们有一次跳过该元素的机会,于是乎我在下方创建了一个函数用于跳过后继续验证。
      //关键语句在这一句:两种跳过的方法,用or来return出结果,只要有一个是true,则用掉这次机会之后依旧判断为回文字符串。
     const res =  oneChance(left+1,right) || oneChance(left,right-1)
      return res
    }
    left++
    right--
  }
  //在指针走到left=right或者left>right还未返回false,则回文串成立。
  return true
  //下方是给一个机会跳过验证错误的函数,思路与上方基本一致。
  function oneChance(left,right){
    while(left<right){
      if(s[left] !== s[right]){
        return false
      }
      left++
      right--
    }
    return true
  }
};