当单词不是回文时,回文函数返回true

时间:2016-02-23 21:20:06

标签: javascript palindrome

有人能够善意地告诉我为什么“almostomla”在我的代码中返回true。

我已经搜索过,并且已经看到有更简单的版本,但我现在深入到这段代码中我现在需要让它工作,如果可能的话。 请原谅可怕的变量名称,我很沮丧。

function palindrome(str) {
  str = str.toLowerCase();
  str = str.replace(/ /g, '').replace(/\./g, '').replace(/,/g, '');

  for (var i = 0; i < str.length / 2; i++) {
    for (var j = str.length - 1; j > str.length / 2 - 1; j--) {
      var iDntKnow = str.charAt(i);
      var iDntKnowEither = str.charAt(j);
      if (iDntKnow === iDntKnowEither) {
        return true;
      } else {
        return false;
      }
    }
  }
}

感谢所有答案。

5 个答案:

答案 0 :(得分:3)

虽然如果你把时间投入其中,我可以理解想要让某些东西发挥作用的挫折感,但是从绘图板开始并没有让自己疯狂的事情也有可说。我看到你的代码的主要问题是当你只需要一个时你有两个循环。第二个循环实际上正在破坏你。我建议运行一个调试器(键入&#34;调试器&#34;进入你的代码并运行)以查看原因。

我相信这是你想要完成的事情:

var palindrome = function(str) {

  // Put any additional string preprocessing here.

  for(var i = 0; i < str.length/2; i++) {
    var j = str.length-i-1;

    if (str[i] != str[j]) {
      return false;
    }
  }

  return true;
}

通过这种方式,您将比较字符串中的每个镜像元素,以确认该字符串是否为回文结构。

答案 1 :(得分:2)

现在似乎已经回答了你的问题。

如果性能不是问题,为什么不使用它?

function palindrome(str) {
  str = str.toLowerCase();
  return (str.split().reverse().join() === str)
}

它将字符串拆分为一个数组,将其反转并将其连接在一起。结果与原始字符串进行比较。

答案 2 :(得分:1)

你只能知道它在每次迭代中是不是回文。

另外,为什么要使用嵌套循环?

function palindrome(str) {
  str = str.toLowerCase();
  str = str.replace(/ /g, '').replace(/\./g, '').replace(/,/g, '');

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

答案 3 :(得分:0)

这有效:

 function palindrome(string) {
   string = string.toLowerCase();

   for (var i = 0; i < Math.ceil(str.length/2); i++) {
     var character1 = string.charAt(i);
     var character2 = string.charAt(string.length-1-i);
     if (character1 !== character2) {
        return false;
     }
   }
   return true;
}

答案 4 :(得分:0)

这是一个省略空格和逗号的版本:

var removeLetterFromString = function(string,letterPos){
    var returnString = "";
    for(var i = 0; i < string.length; i++){
        if(i!==letterPos){
             returnString=returnString+string.charAt(i);
        }
    }
    return returnString;
};
var palindrome = function(string) {
    string = string.toLowerCase();
    var stringCheck="";
    var recheck = true;
    while(recheck){
        recheck=false;
        for(var i = 0; i < string.length; i ++){
            if(string.charAt(i)===" "||string.charAt(i)===","){
                string=removeLetterFromString(string,i);
            }
        }
        for(var i = 0; i < string.length; i ++){
            if(string.charAt(i)===" "||string.charAt(i)===","){
                recheck=true;
            }
        }
    }    
    if(string.length===0){
        return false;
    }
    for (var i = 0; i < Math.ceil(string.length/2); i++) {
        var j = string.length-1-i;
        var character1 = string.charAt(i);
        var character2 = string.charAt(j);
        if (character1 !== character2) {
             return false;
        }
    }
    return true;
};