带 FOR 循环的回文函数

问题描述 投票:0回答:4

我在回文函数方面遇到问题。 这是我的职责:

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”,这是不正确的。为什么会这样?

javascript palindrome
4个回答
3
投票

首先,您在循环内使用 return 语句,该语句在仅检查数组的第一个和最后一个元素后执行,然后函数返回 true 或 false,这是错误的。

另外,请注意:almostomla 和 amariorama 不是回文 使用reverse()方法很容易检查回文,如下所示:

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

2
投票

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

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

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

这将是正确的代码。


0
投票
function palindrome(x) {
    let words = [];
    let truth = [];
    for (i=0; i<100; i++) {
    if (x.length == 0 || x.length == 1) {
    truth.push(1);
    words.push(x);
    break;
    } else if (x.slice(0,1) == x.slice(x.length-1)) {
    truth.push(1);
    words.push(x);
    newWord = x.slice(1,x.length-1);
    x = newWord;
    } else {
    truth.push(0);
    words.push(x);
    break;
    } 
    } if (truth.includes(0)) {
    document.write(words[0] +" " +"is NOT a Palindrome");}
    else 
    {
    document.write(words[0] +" " +"is a Palindrome");
    }
}

palindrome("inputword");
© www.soinside.com 2019 - 2024. All rights reserved.