回文串的衍生问题
回文字符串的衍生问题
题意如下
给定一个字符串 str,最多删除一个字符。判断该字符串 str 有没有可能成为回文字符串。 难度:easy
对比力扣问题,它多了一个小要求,就是可以最多删除一个字符,其实也非常简单,利用回文串的对称性可以解决该问题。(最通俗的说:回文串正读和反读是同一个字符串)。
思路:用首尾双指针 left 和 right ,如果首尾双指针对应的字符相同,则左右指针均移动;若不相同,那么此时存在两种可能
- left++,right 不变,判断 [left+1,right] 区间内的字符串是否回文;
- left 不变,right++,判断 [left,right+1] 区间内的字符串是否回文;
- 若其中之一满足条件,则返回 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;
}
🦑写文章系列会持续更新...
转载自:https://juejin.cn/post/7251792725070708795