【问题标题】:Comparing Letters in a Palindrome (JavaScript) [duplicate]比较回文中的字母(JavaScript)[重复]
【发布时间】:2015-03-01 19:14:34
【问题描述】:

我的目标是测试用户输入的单词(少于 10 个字母)是否是回文。我想这样做我比较第一个字母到最后一个,第二个字母到第二个到最后一个,第三个字母到第三个到最后一个......

我正在使用 for 循环和数组来执行此操作。我不能使用 reverse() 方法。我的主要问题是格式化我拥有的比较方程:

(lettersArray[i] + 1) == (lettersArray[i].length - 1)

这应该将第一个与最后一个、第二个和第二个与最后一个进行比较,依此类推。这是正确的格式吗?我在访问数组中最后一个索引并将其倒数的方法中是否正确?请让我知道我做错了什么,因为它没有运行。这是我的代码:

var usersWord = prompt("Enter a Palindrome");

var lettersArray =usersWord.split(""); // this is the array

for(var i=0; lettersArray.length < 11; i++) {

    if((letters[i] + 1) == (lettersArray.length[i]-1)) {
        alert("is palindrome");
    } //end if statement

    else{
        alert("is not palindrome");
    } // end else statement

 } // end for statement

【问题讨论】:

  • 在这个问题中更多检查回文:stackoverflow.com/questions/14813369/…
  • 你为什么要检查lettersArray.length &lt; 11
  • 1.您只需要检查字符串的前半部分并将其与后半部分进行比较。 2.您需要检查所有这些字母,直到它们不匹配或用完字符
  • 我在检查 lettersArray.length
  • 您只需要检查前半部分和后半部分。即 i

标签: javascript arrays palindrome


【解决方案1】:

您的代码的问题是您在检查每个字符后报告结果;但是,如果不检查每个字符,我们就无法判断一个单词是否是回文。以下函数可能更适合您的要求。

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

另一个需要注意的重要点是,您应该检查直到word.length / 2,而不是任意数字11,它可能会根据用作输入的单词而改变。另请注意,word.length / 2 是一个优化案例。循环也可以一直运行到字长,但无需再次检查 last char == first char 是否已经 first char == last char

【讨论】:

  • 谢谢马南!我知道这个解决方案,我只是想看看我比较第一个和最后一个,第二个到第二个(等等)的方法是否可行。
  • 我也不熟悉 charAt() 方法,所以我试图找到解决方法。
  • 我不认为我会调用长度变量 l——它太容易被误读。除此之外,写得很好的答案+1。
  • @EngineerDollery 已修复,谢谢 :)
猜你喜欢
  • 2016-05-03
  • 1970-01-01
  • 2017-06-27
  • 2018-07-11
  • 2014-09-13
  • 1970-01-01
  • 2014-08-23
  • 2016-03-15
  • 1970-01-01
相关资源
最近更新 更多