【问题标题】:Checking to see if a word has multiple letters检查一个单词是否有多个字母
【发布时间】:2013-08-05 14:13:26
【问题描述】:

我正在尝试检查一个单词中是否有多个字母(每个单词都是 5 个字母),并且我在一个名为 library 的变量中有一个 8938 个单词的数组。

           function checkLetters(word){
                var constant = 0;
                for(i=0;i<5;i++){
                    for(j=i+1;j<5;j++){
                        if(word.charAt(i) == word.charAt(j)){
                            return false;
                            break;
                        } else {
                            return true;
                        }
                    }
                }
            }
            if(compPrompt == 5 && checkLetters(compChoice) == true){
                console.log(checkLetters(compChoice));
                $('.right').append('<p id="winQuestion">Is "'+compFinalChoice+'" your word?');
                $('.right').append('<div class="yesNo" id="yesQ"><p>Yes</p></div>');
                $('.right').append('<div class="yesNo" id="noQ"><p>No</p></div>');
                $('#yesQ').click(function() {
                    alert('Your word is "'+compFinalChoice+'". You lose!');
                    document.location.reload(true);
                });
                $('#noQ').click(function() {
                    $('.yesNo').remove();
                    $('#winQuestion').remove();
                    var splitCompChoice = compFinalChoice.split('');
                    var constant = 0;
                    var possibleAnswers = [];
                    for(var k=0;k<8939;k++){
                        for(var i=0;i<5;i++){
                            if(library[k].indexOf(splitCompChoice[i]) > -1){
                                constant++;
                                if(constant = 5 && checkLetters(library[k]) == true){
                                    possibleAnswers.push(library[k]);
                                }
                            }
                        }
                });
            }

我的代码有 2 个问题。一是在 checkLetters(compChoice) 不正确时超过 if(compPrompt == 5 &amp;&amp; checkLetters(compChoice) == true){,二是告诉我 library[k] 未定义。

【问题讨论】:

  • 当你说“多个字母”时,你的意思是这个词是否有重复的字母?
  • 是的,但是这个问题在下面得到了解决,我有一个单词数组调用库,当我点击 #noQ 时它告诉我库 [k] 没有定义
  • @btse 他的意思是repeating 字母 - 他的代码比他的话更好:)
  • 好的,那么这是另一个提示。我想对于 5 个字母,您当前的算法还不错,但总的来说它仍然是 O(n^2)。更好的解决方案是创建一个布尔数组,其中每个字母都与数组中的索引相关。遍历单词并将与该字母相关的数组中的值设置为 true。如果索引已设置为 true,则返回 false,因为该字母已存在于单词中。这会用一些内存换取 O(n) 的速度。

标签: javascript arrays loops for-loop nested-loops


【解决方案1】:

在第一个函数中,如果第一个字符不等于第二个字符,则返回 true,为了修复它,您应该更改:

function checkLetters(word){
    var constant = 0;
    for(i=0;i<5;i++){
        for(j=i+1;j<5;j++){
            if(word.charAt(i) == word.charAt(j)){
                return false;
                break;
            } else {
                return true;
            }
        }
     }
}

到:

function checkLetters(word){
    var constant = 0;
    for(i=0;i<5;i++){
        for(j=i+1;j<5;j++){
            if(word.charAt(i) == word.charAt(j)){
                return false;
                break;
            } 
        }
    }
    return true;
}

其次,由于我们看不到您在此处发布的代码中在哪里声明 library,我相信它可能在某处定义为 var(局部变量),这意味着如果您想成为能够在其他一些函数中使用它,你应该传递它。

更新:
关于library - 尝试改代码如下:

$('#noQ').click(function(library) {
    $('.yesNo').remove();
    $('#winQuestion').remove();
    var splitCompChoice = compFinalChoice.split('');
    var constant = 0;
    var possibleAnswers = [];
    for(var k=0;k<8939;k++){
        for(var i=0;i<5;i++){
            if(library[k].indexOf(splitCompChoice[i]) > -1){
                constant++;
                if(constant = 5 && checkLetters(library[k]) == true){
                    possibleAnswers.push(library[k]);
                }
            }
        }
}(library));

【讨论】:

  • 这是我代码中的第一件事,我不明白它怎么可能是一个局部变量。
  • @ThomasNocera 在这种情况下,请参阅答案的UPDATE 部分
  • 仍然没有运气得到这个“TypeError: library[k] is undefined [Break On This Error] if(library[k].indexOf(splitCompChoice[i]) > -1){”跨度>
  • if(compPrompt == 5... 之前尝试alert(library); 看看它是否在那里定义
  • 尝试使用:jsfiddle.net(在此处发布链接)发布您的代码 - 如果没有完整的代码,就无法调试它。
【解决方案2】:

为了解决当 checkLetters 函数返回 false 时通过 if 语句的问题,我将更改语句从

if(compPrompt == 5 &amp;&amp; checkLetters(compChoice) == true)

if(compPrompt == 5 && checkLetters(compChoice))

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 2015-03-28
    • 2012-11-02
    • 1970-01-01
    • 2013-06-07
    • 2021-05-16
    • 2018-07-09
    • 2021-09-13
    • 1970-01-01
    相关资源
    最近更新 更多