回文算法

时间:2016-11-28 12:43:43

标签: javascript arrays algorithm

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

此算法应检查特定的单词/句子是否向后读取相同的内容。显然,对于比较,应忽略所有非alpha数字字符。

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");

感谢任何提示。

5 个答案:

答案 0 :(得分:2)

您需要将反向字符串与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"));

答案 1 :(得分:1)

这可以递归地完成

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

答案 2 :(得分:1)

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;  
}

答案 3 :(得分:0)

您可以使用此

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'));

答案 4 :(得分:0)

你也可以这样做......

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"));