本文我们解析力扣刷题第680题,验证回文字符串II 本题题解:在原有的"验证回文字符串I"中,本题需要给一次机会去删一个不回文的元素,并在删除后继续往下判断,到最后左右指针相等或者左指针在右指针的右边时,回文验证正确。
var validPalindrome = function(s) {
//双指针解法,首先定首尾。
let left = 0,right = s.length-1
//其次进入到while循环当中。
while(left<right){
//先抓出两边指针不相同的特例
if(s[left] !== s[right]){
//由于本题需要给一次删除元素的机会,我们可以理解为,我们有一次跳过该元素的机会,于是乎我在下方创建了一个函数用于跳过后继续验证。
//关键语句在这一句:两种跳过的方法,用or来return出结果,只要有一个是true,则用掉这次机会之后依旧判断为回文字符串。
const res = oneChance(left+1,right) || oneChance(left,right-1)
return res
}
left++
right--
}
//在指针走到left=right或者left>right还未返回false,则回文串成立。
return true
//下方是给一个机会跳过验证错误的函数,思路与上方基本一致。
function oneChance(left,right){
while(left<right){
if(s[left] !== s[right]){
return false
}
left++
right--
}
return true
}
};