好的,所以我正在努力提高我的 JS,并且我遇到了流行的回文检查器练习。这次,freeCodeCamp 的这个解决方案应该表现得很好,但我无法理解它的几个方面。
/this solution performs at minimum 7x better, at maximum infinitely better.
//read the explanation for the reason why. I just failed this in an interview.
function palindrome(str) {
//assign a front and a back pointer
let front = 0
let back = str.length - 1
//back and front pointers won't always meet in the middle, so use (back > front)
while (back > front) {
//increments front pointer if current character doesn't meet criteria
if ( str[front].match(/[\W_]/) ) {
front++
continue
}
//decrements back pointer if current character doesn't meet criteria
if ( str[back].match(/[\W_]/) ) {
back--
continue
}
//finally does the comparison on the current character
if ( str[front].toLowerCase() !== str[back].toLowerCase() ) return false
front++
back--
}
//if the whole string has been compared without returning false, it's a palindrome!
return true
}
现在,我对这段代码有几个问题:
1- 将 str 的长度减少 1 有什么意义?我已经在几个回文跳棋中看到过这种情况,但我仍然无法理解它。
2- .match 方法是否意味着“如果参数包含这些字符,则返回 true”?
3-为什么“/[\W_]/”等于“所有字符”?
4-前后加1、减1有什么意义?特别是在函数结束时。
谢谢你,如果这是一个愚蠢的问题,我很抱歉,我只是真的有兴趣理解这里的逻辑。
最佳答案
为了回答你的第一个问题,“back”是一个指向字符串后面的指针。其值为 str.length - 1
的原因是 str.length
会给出字符串中属性的数量,尽管索引是从 0 开始的。出于这个原因,您需要从长度中减去 1 以获得最后一个属性的索引。
为了回答你的最后一个问题,分别从前面/后面加 1/减 1 是为了增加彼此测试的属性。例如,如果字符串是“abba”,则在比较第一个字母和最后一个字母后,它将增加计数器,以便将第一个 b(新的“front”)与第二个 b(新的“back”)进行比较。 ')
关于javascript - 有人可以解释一下这个回文解决方案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52509047/