给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: "aba"
输出: True
示例 2:
输入: "abca"
输出: True
解释: 你可以删除c字符。
左右如果相等那就继续比较,当左右不相等的时候,要么删除左边的一个再进行比较,要么删除右边的一个接着进行比较,例子:"abccbma",当比较到b和m的时候不相等了,这个时候要么删除b进行比较,要么删除m再进行比较。
解法一:
var validPalindrome = function (s) {
let left = 0;
let right = s.length -1
while (left < right) {
if(s[left] != s[right]){
return check(left + 1,right) || check(left, right - 1) // false || true = true
}
left++
right--
return true
}
//判断删除后的字符串是否相等
function check(left, right){
while (left < right) {
if(s[left] != s[right]) {
return false
}
left++
right--
}
return true
}
}
不知道哪里错了
看看别人递归解法吧
const validPalindrome = (s, count = 0) => {
for (let i = 0, j = s.length - 1; i < j; i++, j--) {
if (s[i] === s[j]) {
continue;
}
if (count > 0) {
return false;
}
return validPalindrome(s.slice(i, j), count + 1) || validPalindrome(s.slice(i + 1, j + 1), count + 1);
}
return true;
};