【发布时间】: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 && 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