【发布时间】:2013-12-20 16:47:13
【问题描述】:
这对 coderbyte 来说是一个挑战,我想我会尝试使用与循环、对象不同的方法来解决它。它通过了,但并不完美。挑战的方向是:
让函数 LetterCountI(str) 接受传递的 str 参数并返回第一个具有最多重复字母数的单词。例如:“今天,是有史以来最伟大的一天!”应该返回最大,因为它有 2 个 e(和 2 个 t),而且它比以前也有 2 个 e。如果没有重复字母的单词返回-1。单词将用空格分隔。
function LetterCountI(str){
var wordsAndLetters = {};
var count = 0;
var finalword;
str = str.split(" ");
for(var i = 0; i < str.length; i++){
wordsAndLetters[str[i]] = wordsAndLetters[str[i]] || 0;
}
function countWordLetters(strs){
strs = strs.split("");
var lettercount = {};
for(var i = 0; i <strs.length; i++){
lettercount[strs[i]] = lettercount[strs[i]] || 0;
lettercount[strs[i]]++;
}
return lettercount;
}
for(var words in wordsAndLetters){
wordsAndLetters[words] = countWordLetters(words);
var highestLetterFrequency = wordsAndLetters[words];
for(var values in highestLetterFrequency){
if(highestLetterFrequency[values] > count){
count = highestLetterFrequency[values];
finalword = words;
}
if(count !== 1){
return finalword;
}
}
}
return -1;
}
LetterCountI("today is the greatest day ever!");
抱歉,如果某些变量名称令人困惑,我已经花了很长时间试图弄清楚我做错了什么。如果您使用代码底部的参数,它会返回 'greatest' 就像它应该将参数更改为
LetterCountI("toddday is the greatttttest day ever!");
当它应该记录“greatttttest”时,它会记录“toddday”。我的代码完全错误吗?我意识到如果参数是(“caatt dooog”)它应该记录“caatt”,因为有 4 个重复出现的字母,但我并不担心我只是担心它会找到一个字母的重复次数最多(但无论如何如果您有解决方案,我想听听!)。如果需要对变量进行任何更改以使此代码更具可读性,我们将不胜感激!
【问题讨论】:
-
你确定“caatt dooog”应该返回“caatt”吗?我会说要求是为 3 个字母重复返回“dooog”,而不是“caatt”,它只有 2 个字母重复,尽管重复两次
-
我只是说,如果我们按照这里的 coderbyte 说明进行操作,那么 caatt 会有更多重复出现的字母。
-
但这就是我的意思,您发布的说明有点误导,我认为您对它们的解释是错误的。线索是要求给出了最大重复值 2,而不是 4,这符合“caatt dooog”示例中的规则
-
使用下划线,你可以在几行中做到这一点......如果你想要另一种方法,我可以准备一个答案。
-
Here's an alternative solution..。我没有把它作为答案,因为这不能回答你原来的问题。
标签: javascript object for-loop