likes
comments
collection
share

回文串的衍生问题

作者站长头像
站长
· 阅读数 14

回文字符串的衍生问题

题意如下

给定一个字符串 str,最多删除一个字符。判断该字符串 str 有没有可能成为回文字符串。 难度:easy

对比力扣问题,它多了一个小要求,就是可以最多删除一个字符,其实也非常简单,利用回文串的对称性可以解决该问题。(最通俗的说:回文串正读和反读是同一个字符串)。

思路:用首尾双指针 left 和 right ,如果首尾双指针对应的字符相同,则左右指针均移动;若不相同,那么此时存在两种可能

  1. left++,right 不变,判断 [left+1,right] 区间内的字符串是否回文;
  2. left 不变,right++,判断 [left,right+1] 区间内的字符串是否回文;
  3. 若其中之一满足条件,则返回 true,否则直接返回 false。

代码如下:

const solution = (str) => {
    // 当字符串长度小于1时,是满足题意的,因为空字符串也是回文串
    if(str.length<1) return true;
    let left = 0;
    let right = str.length - 1;
    // 根据回文串对称的特性,循环判断
    while (left < right && str[left] === str[right]) {
        left++;
        right--;
    }
    // 在不满足回文特性时退出上述循环
    if (isPalindromicString(str, left + 1, right)) return true;
    if (isPalindromicString(str, left, right - 1)) return true;

    return false;
}

// 判断字符串回文的函数
const isPalindromicString = (str, left, right) => {
    while (left < right) {
        if (str[left] !== str[right]) return false;
        left++;
        right--;
    }
    return true;
}

🦑写文章系列会持续更新...