我想用‘双指针’模式来解决"回文"问题.以下是解决此问题的代码:
var isPalindrome = function(s) {
const newStr = s.toLowerCase().replace(/[^0-9a-z]/g, "")
let left = 0
let right = newStr.length-1
while (left < right) {
if (newStr[left] !== newStr[right]) {
return false
}
left++
right--
}
return true
};
console.log(isPalindrome('racecar'))
console.log(isPalindrome('Ceci n’est pas une palindrome'))
上面的代码按预期工作,但问题是我不太理解这个逻辑是如何工作的:
while(left < right)
确保解决回文问题的工作正确.比方说,我们有这个字符串‘racecar’,如果我们向左和向右移动指针指向彼此,如果两个指针都指向‘e’旁边的两个‘c’,那么While循环将在最后一次运行,但我们错过了‘e’,因为我们错过了‘e’,我们如何确定两个指针解决了回文问题?有人能澄清这一点吗?
我不明白两个指针模式如何解决回文问题,我们错过了‘e’,因为我们有这个字符串‘racecar’.