验证回文串 II

给你一个字符串 s,最多 可以从中删除一个字符。
请你判断 s 是否能成为回文字符串:如果能,返回 true ;否则,返回 false 。

  • 输入:s = “aba”
    输出:true

  • 输入:s = “abca”
    输出:true
    解释:你可以删除字符 ‘c’ 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function isPalindrome(str, l, r) {
while (l < r) { //对撞指针不断判断两边的数字是否相等
if (str[l] != str[r]) {
return false;
}
l++;
r--;
}
return true;
}

var validPalindrome = function (str) {
let l = 0, r = str.length - 1; //头尾指针
while (l < r) {
if (str[l] != str[r]) {//左右指针不一样 还有一次机会,左指针向前一步或者右指针向后一步继续验证
return isPalindrome(str, l + 1, r) || isPalindrome(str, l, r - 1);
}
l++;
r--;
}
return true;
};