Javascript 一个单词中重复出现字母频率最高的字符串

Javascript 一个单词中重复出现字母频率最高的字符串,javascript,object,for-loop,Javascript,Object,For Loop,这对coderbyte来说是一个挑战,我想我应该尝试用一种不同于循环和对象的方法来解决它。它通过了,但并不完美。挑战的方向是: 让函数LetterCountI(str)获取要传递的str参数,并返回重复字母数最多的第一个单词。例如:“今天是有史以来最伟大的一天!”应该返回最伟大的一天,因为它有两个e(和两个t),而且它在以前也有两个e。如果没有重复字母的单词,则返回-1。单词之间用空格隔开 当它应该记录“greatttest”时,它会记录“todday”。我的代码完全错了吗?我意识到如果参数是(

这对coderbyte来说是一个挑战,我想我应该尝试用一种不同于循环和对象的方法来解决它。它通过了,但并不完美。挑战的方向是:

让函数LetterCountI(str)获取要传递的str参数,并返回重复字母数最多的第一个单词。例如:“今天是有史以来最伟大的一天!”应该返回最伟大的一天,因为它有两个e(和两个t),而且它在以前也有两个e。如果没有重复字母的单词,则返回-1。单词之间用空格隔开

当它应该记录“greatttest”时,它会记录“todday”。我的代码完全错了吗?我意识到如果参数是(“caatt dooog”),它应该记录“caatt”,因为有4个重复出现的字母,但我不担心,我只是担心找到一个字母的最重复出现(但无论如何,如果你有一个解决方案,我希望听到!)。如果需要对变量进行任何更改以使此代码更具可读性,我们将不胜感激

Array.prototype.getUnique=function(){
变量u={},a=[];
对于(变量i=0,l=this.length;i重量){
重量=差值;
最终=温度[i];
}
}
}
返回最终结果;
}
控制台日志(LetterCountI(“Catt dooog”);
log(LetterCountI(“今天是有史以来最伟大的一天!”);

代码的问题在于以下代码部分的定位:

if(count !== 1){
    return finalword;
}
将其从当前位置移动到返回-1之前,如下所示:

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;
原始代码的问题是,您返回的第一个单词包含重复字符,这意味着您的代码没有足够的距离来检查后续单词是否包含更多重复字符

还有,只是为了好玩,。

林克万岁

    var resultPerWord = new Dictionary<string, int>();

    var S = "toddday is the greatttttest day ever!";

    foreach(var s in S.Split(' ')) 
    {
        var theArray =
            from w in s
            group w by w into g
            orderby g.Count() descending
            select new { Letter = g.Key, Occurrence = g.Count() };

        resultPerWord.Add(s, theArray.First().Occurrence);
    }

    var r = "-1";
    if (resultPerWord.Any(x => x.Value >1))
    {
        r = resultPerWord.OrderByDescending(x => x.Value).First().Key;
    }
var resultPerWord=newdictionary();
var S=“今天是有史以来最伟大的一天!”;
foreach(s.Split(“”)中的var s)
{
var theArray=
从w到s
将w按w分组为g
orderby g.Count()降序
选择新{Letter=g.Key,Occurrence=g.Count()};
resultPerWord.Add(s,theArray.First().Occurrence);
}
var r=“-1”;
if(resultPerWord.Any(x=>x.Value>1))
{
r=resultPerWord.OrderByDescending(x=>x.Value).First().Key;
}

您确定“caatt dooog”应该返回“caatt”吗?我想说的是,要求返回3个字母重复的“dooog”,而不是只有2个字母重复的“caatt”,尽管twiceI只是说,因为如果我们按照coderbyte的说明进行操作,caatt会有更多重复出现的字母。但这就是我要说的,你发布的说明有点误导,我认为你对它们的解释是错误的。线索是,需求给出的最大重复值为2,而不是4,这将符合“caatt dooog”示例中的规则使用下划线,您可以在几行内完成此操作。。。如果你需要另一种方法,我可以准备一个答案。。我不是把这个作为答案,因为这并没有回答你原来的问题。非常感谢@musefan非常有用,好像我在昏昏欲睡的状态下把它隔开了:)
if(count !== 1){
    return finalword;
}
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;
    var resultPerWord = new Dictionary<string, int>();

    var S = "toddday is the greatttttest day ever!";

    foreach(var s in S.Split(' ')) 
    {
        var theArray =
            from w in s
            group w by w into g
            orderby g.Count() descending
            select new { Letter = g.Key, Occurrence = g.Count() };

        resultPerWord.Add(s, theArray.First().Occurrence);
    }

    var r = "-1";
    if (resultPerWord.Any(x => x.Value >1))
    {
        r = resultPerWord.OrderByDescending(x => x.Value).First().Key;
    }