javascript - 有人可以解释一下这个回文解决方案吗?

标签 javascript palindrome

好的,所以我正在努力提高我的 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/

相关文章:

javascript - 无法将 JSON 从服务获取到 angularJs 路由中

java - 如果您在控制台中输入的单词是回文,或者不是 Java 中的回文,则使程序成为您

c++ - C++ 中的字符串比较是如何工作的?

c++ - 如果给定一个 15 位数字,找到下一个回文的最佳方法是什么?

javascript - 电力单位计算器

javascript - 当脚本没有上传文件时如何阻止提交按钮?

php - 一位 Facebook 用户和一位我的网站用户

javascript - 传单标记图标的动画过渡

c - 查找基数 K 中的第 n 个回文素数

c++ - 找到下一个回文