验证回文字符串 Ⅱ
最多删除一个字符,可认为有一次容错。
双指针
function validPalindrome(s: string): boolean {
let left = 0, right = s.length - 1
const valid = (s: string, l: number, r: number): boolean => {
while (l < r) {
if (s[l] !== s[r]) {
return false
}
l++
r--
}
return true
}
while (left < right) {
if (s[left] === s[right]) {
left++
right--
} else {
// 容错可以从左边,也可以从右边。
return valid(s, left + 1, right) || valid(s, left, right - 1)
}
}
return true
}