这是一个针对coderbyte的挑战,我想尝试使用不同于循环、对象的方法来解决它。虽然它通过了测试,但并不完美。挑战的指导如下:
编写一个函数LetterCountI(str),它将传入的str参数作为输入,并返回具有最多重复字母的第一个单词。例如:"Today, is the greatest day ever!"应该返回"greatest",因为它有2个e(和2个t),并且出现在也有2个e的"ever"之前。如果没有单词中有重复字母,则返回-1。单词将由空格分隔。
编写一个函数LetterCountI(str),它将传入的str参数作为输入,并返回具有最多重复字母的第一个单词。例如:"Today, is the greatest day ever!"应该返回"greatest",因为它有2个e(和2个t),并且出现在也有2个e的"ever"之前。如果没有单词中有重复字母,则返回-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!");
如果有些变量名让人困惑,我很抱歉,因为我已经熬夜很久了,一直在努力弄清楚我的问题在哪里。 如果您使用代码底部的参数,它会像应该返回“最大值”一样,但是如果将参数改成
LetterCountI("toddday is the greatttttest day ever!");
当代码应该记录 'greatttttest' 时,它记录了 'toddday'。我的代码完全错误吗?我意识到如果参数是 ("caatt dooog"),它应该记录 'caatt',因为有4个重复的字母,但我不担心这个问题,我只关心它找到最多重复一个字母(但是如果您有解决方案,请让我知道!)。 如果需要对变量进行任何更改以使该代码更易读,则会赞赏。