1. 题目
剑指 Offer II 019. 最多删除一个字符得到回文
2. 思路(双指针)
- 先定义一个根据快慢指针判断是否为回文的方法,逻辑就是慢指针从左到右,快指针从右到左,如果对应字符不相同,那就不是回文,否则是回文;
- 同样地,慢指针从左到右,快指针从右到左,如果对应字符相同,指针同时往里走,否则分别删除slow、fast对应的字符后判断剩下的字符是否为回文字符串;
3. 代码实现
/**
* @param {string} s
* @return {boolean}
*/
var validPalindrome = function(s) {
// 判断字符串是否为回文字符串
function isHuiWen(slow, fast) {
for (let i = slow, j = fast; i < j; i++, j--) {
if (s[i] !== s[j]) return false
}
return true
}
let slow = 0, fast = s.length - 1
while (slow < fast) {
if (s[slow] === s[fast]) {
slow++
fast--
} else {
// 判断去掉slow或者去掉fast以后,剩下得字符串是否为回文字符串
return isHuiWen(slow + 1, fast) || isHuiWen(slow, fast - 1)
}
}
return true
};
4. 参考
JavaScript版解题思路