具有FOR循环的回文函数

时间:2017-06-16 15:23:32

标签: javascript palindrome

我遇到了回文功能问题。 这是我的功能:

function palindrome(str) {

  var newStr= str.replace(/[^0-9a-z]/gi, '').toLowerCase().split("");

  for(var i=0; i < (newStr.length)/2; i++){ 
    if(newStr[i] == newStr[newStr.length-i-1]){ 
      return true; 
    } else 
      return false; 
  }

} palindrome("almostomla");

每个单词都很顺利,除了这个单词“almostomla”和其他类似单词,例如:“amariorama”,它是不正确的。为什么会这样?

3 个答案:

答案 0 :(得分:1)

您的代码失败,因为您在循环的第一次迭代时返回。您应该只在结束时返回 - 或者如果检查失败,您可以立即返回。

function palindrome(str) {

  var newStr= str.replace(/[^0-9a-z]/gi, '').toLowerCase().split("");

  for(var i=0; i < (newStr.length)/2; i++){ 
    if(newStr[i] == newStr[newStr.length-i-1]){ 
      //return true;
    } else 
      return false; 
  }
  return true;
}

这可以重构为删除else

function palindrome(str) {

  var newStr= str.replace(/[^0-9a-z]/gi, '').toLowerCase().split("");

  for(var i=0; i < (newStr.length)/2; i++){ 
    if(newStr[i] !== newStr[newStr.length-i-1]){ 
      return false;
    } 
  }
  return true;
}

答案 1 :(得分:1)

首先,你在循环中使用return语句,只在检查数组的第一个和最后一个元素之后执行,然后函数返回false,这是错误的。

另外,请注意:almostomla和amariorama不是pallindrome 使用reverse()方法可以很容易地检查pallindrome如下:

    function palindrome(s) {
       var reverseString = s.split("").reverse().join("");
       if(s==reverseString)
          console.log("palindrome");
       else
          console.log("not palindrome");
    }
    palindrome("almostomla");

答案 2 :(得分:0)

回文是一个单词,短语,数字或其他字符序列,它们向后读取与向前相同的字符,例如女士或赛车。当调整大写字母,标点符号和分词器时,可以写出句子长度的句子,例如“一个男人,一个计划,一条运河,巴拿马!”,“这是我看到的汽车还是猫? “或尼克松的“不'x'。”

在上面的代码中,您只检查字符串的第一个和最后一个字符,您需要检查整个字符串。

function palindrome(str) {

  var newStr= str.replace(/[^0-9a-z]/gi, '').toLowerCase().split("");

  for(var i=0; i < (newStr.length)/2; i++){ 
    if(newStr[i] !== newStr[newStr.length-i-1]){ 
      return false; 
    }  
  }
 return true;
}

这将是正确的代码。