题目
leetcode
解题思路
- 从字符串左右两头进行验证,如果s[left] ==s[right],则left++,right--继续向中间靠拢,否则返回false
- 由于该题目可以从中删除一个字符,当s[left] !== s[right]时需要再有一次机会,所以需要再进行一次s[left+1]?= s[right]或者s[left] ?= s[right-1]的验证。 我们可以定义一个判断是否为回文字符串的函数(这个函数可以直接解决leetcode-5),然后调用它。
- 最终都验证完成了返回true即可
JavaScript代码
var validPalindrome = function(s) {
// 判断回文字符串
function isPalindrome(left, right) {
while (left < right) {
if (s[left] !== s[right]) {
return false;
}
left++;
right
}
return true;
}
let left = 0,
right = s.length - 1;
while (left < right) {
if (s[left] !== s[right]) {
// 这里已经检查出不是回文了,相当于再给一次机会检查剩余的是否为回文字符串
return isPalindrome(left + 1, right) || isPalindrome(left, right - 1);
}
left++;
right
}
return true;
};