美文网首页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
}

相关文章

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

    题目 给定一个非空字符串 str,最多删除一个字符。判断是否能成为 回文字符串。 注意:字符串只包含从 a-z 的...

  • JavaScript回文问题

    回文算法挑战 如果给定的字符串是回文,返回true,反之,返回false。 palindrome(回文)是指一个字...

  • 最长回文子串

    最长回文子串——Manacher 算法 1. 问题定义 最长回文字符串问题:给定一个字符串,求它的最长回文子串长度...

  • 一文弄懂Manacher算法

    今天我们来介绍一下处理回文字符串的算法:Manacher(俗称“马拉车”)。 算法功能 回文字符串的通俗定义是:如...

  • 寻找字符串中最长回文——Manacher算法及其Java实现(P

    题目:给一个字符串,找出最长的回文的长度(或求这个回文)。分析:寻找字符串中的回文,有特定的算法来解决,也是本文的...

  • JavaScript Manacher 算法

    Manacher 算法 当一段字符串正序倒序都一样的成为回文:12321 就是回文字符串 manacherStri...

  • Manacher's algorithm

    Manacher算法主要解决的问题是求给定字符串中最长的回文字符串。 以前咱们求解回文字符串的步骤是找中心点, ...

  • 最长回文子串问题—Manacher算法

    最长回文串问题是一个经典的算法题。 0. 问题定义 最长回文子串问题:给定一个字符串,求它的最长回文子串长度。如果...

  • js算法

    排序算法 冒泡排序 快速排序 字符串操作 判断回文字符串 翻转字符串 反向遍历字符串 function reve...

  • 前端分享会--从一道算法题目开始的学习

    算法题 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 理解 所谓回文,...

网友评论

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

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