【问题标题】:Palindrome algorithm回文算法
【发布时间】:2016-11-28 12:43:42
【问题描述】:

所以我觉得我已经接近这个了,但我只是错过了一些东西。

这个算法应该检查一个特定的单词/句子是否是相同的向后阅读。显然,所有非字母数字字符都应该被忽略以进行比较。

function palindrome(str) {
  var pure = str.replace(/[\W_]/g, "").toLowerCase();
  var arr = [];
  arr = pure.split("").reverse();
  var x = arr.join("");
  
  if(str === x){
    return true;
  }
      return false;  
}

palindrome("eye");

感谢任何提示。

【问题讨论】:

标签: javascript arrays algorithm


【解决方案1】:

您需要将反转的字符串与pure 而不是str 进行比较,尽管您可以通过删除不必要的变量和if 语句来简化它。

function palindrome(str) {
  // remove non-word character including `_`
  var pure = str.replace(/[\W_]/g, "").toLowerCase();
  // split into character array, reverse it and join the array
  var x = pure.split("").reverse().join("");
  // compare the strings
  return pure === x;
}

console.log(palindrome("eye"));
console.log(palindrome("ey e"));
console.log(palindrome("ey"));

【讨论】:

  • @mbt86 :很高兴它有帮助! :)
【解决方案2】:

这可以递归完成

function palindrome(s)
{
   if (s.length<2)
     return true;
   return (s[0]==s[s.length-1]) && palindrome(s.substr(1,s.length-2));
}

【讨论】:

    【解决方案3】:
    function palindrome(str) {
      var pure = str.replace(/[^0-9a-z]/gi, "").toLowerCase();
    
      var arr = [];
      arr = pure.split("").reverse();
      var x = arr.join("");
      if(pure === x){
       return true;
      }
      return false;  
    }
    

    【讨论】:

    • 因此,您可以指定要包含的范围而不是 \W 吗?
    • 实际上 \W 等于 [^0-9a-z_]。
    【解决方案4】:

    你可以用这个

    function palindrome(str) {
     if(str == str.split("").reverse().join("")) {
      return true;
     } else {
      return false;
     }
    }
    
    console.log(palindrome('eye'));
    

    注意它只适用于简单的 ASCII 字符

    仅使用 ASCII 字符进行编辑:

    function palindrome(str) {
     pure = str.replace(/[\W_]/g, "").toLowerCase();
     if(pure == pure.split("").reverse().join("")) {
      return true;
     } else {
      return false;
     }
    }
    
    console.log(palindrome('eye'));
    

    【讨论】:

    • 为什么需要if?只需使用return str == str.split("").reverse().join("");
    • 非常正确。我一直在保持 OP 的编码标准。
    【解决方案5】:

    您也可以这样做...

    var isPalindrome = s => { var t = s.toLowerCase()
                                       .replace(/\s+/g,"");
                              return [].slice.call(t)
                                       .reverse()
                                       .every((b,i) => b === t[i]);
                            };
    
    console.log(isPalindrome("Was it a car or a cat I saw"));
    console.log(isPalindrome("Was it a car or a cab I saw"));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多