美文网首页JavaScript
允许删一个的回文字符串算法

允许删一个的回文字符串算法

作者: Lia代码猪崽 | 来源:发表于2021-04-06 15:00 被阅读0次

    题目

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

    注意:
    字符串只包含从 a-z 的小写字母。字符串的最大长度是 50000

    假设:

    • 输入 aba ,返回 true
    • 输入 abca ,返回 true
    • 输入 abeca ,返回 false

    算法解析

    • 利用回文字符串的对称性,可以使用双指针来优化算法。

    代码

    const validPalindrome  = (str) => {
      const arr = str.split('')
      // 初始化左右指针
      let i = 0
      let j = arr.length - 1
      // 允许被删除
      let deleteNum = 1
      
      while(i <= j) {
        // 如果左右指针指向的字符相等
        if (arr[i] === arr[j]) {
          // 再往中间移动
          i++
          j--
        } else {
          // 如果之前已经删过一次了,直接返回 false
          if (deleteNum < 1) {
            return false
          }
          // 如果删左边指针的字符,能与当前右边的字符相等
          if (arr[i + 1] === arr[j]) {
            deleteNum--
            i = i + 2
            j--
          } else if (arr[i] === arr[j - 1]) {
            // 如果删右边指针的字符,能与当前左边的字符相等
            deleteNum--
            j = j - 2
            i++
          } else {
            return false
          }
        }
      }
    
      return true
    }
    

    相关文章

      网友评论

        本文标题:允许删一个的回文字符串算法

        本文链接:https://www.haomeiwen.com/subject/phqoqltx.html