题目: 给你一个字符串 s,最多 可以从中删除一个字符。请你判断 s 是否能成为回文字符串:如果能,返回 true ;否则,返回 false 。
示例 :
输入:s = "abca"
输出:true
解释:你可以删除字符 'c' 。
🙇♂️ 感想: 判断是否是回文,左右两边相等即是回文。可以删除一个字符再去判断是否是回文。
🙇♂️ 解题思路: 左右两个指针,分别判断左右两个指针指向的数字是否相等,如果不相等,则删除其中一个字符再去判断,是否是回文,是返回true,否返回false
var validPalindrome = function(s) {
if (isPalindrome(s)) return true
let left = 0
let right = s.length - 1
while(left <= right) {
if (s[left] !== s[right]) {
if (left === 0) {
if (isPalindrome(s.substring(left + 1))) {
return true
}
}
if (right === s.length - 1) {
if (isPalindrome(s.substring(0, right))) {
return true
}
} else if (isPalindrome(s.substring(0, left) + s.substring(left + 1, right) + s.substring(right))) { // 删 left
return true
} else if (isPalindrome(s.substring(0, left) + s.substring(left, right) + s.substring(right + 1))) { // 删right
return true
} else {
return false
}
}
left++
right--
}
return false
};
function isPalindrome (s) {
let left = s.substring(0, Math.ceil(s.length / 2))
let right = s.substring(Math.floor(s.length / 2)).split('').reverse().join('')
console.log(s, left, right)
return left === right
}