【问题标题】:Get count of most repeated letter in a word获取单词中重复次数最多的字母
【发布时间】:2015-08-21 22:28:11
【问题描述】:

我正在尝试计算一个单词中重复次数最多的字母

function GreatestCount(str)
{
    var count = {}

    for (var i = 0 ; i<str.length;i++)
    {
        var char = str[i];
        count[char] = (count[char] || 0) + 1;

    }

     //get the largest number for the letter counts
    var max = 0;

    for (var c in count) {
        if (count[c] > max) max = count[c];
    }

    return max
}

谁能解释一下原因

count[char] = (count[char] || 0) + 1;// this works

count[char] += 1 // this does not work 

【问题讨论】:

  • @Oriol 已经回答了您的问题,但我想为您提供更多帮助。您可以在插入对象时存储最大值,这将减少最后一个“for”,节省 26 个循环。此外,您需要使用 .ToLowerCase 来防止在不同的计数器中计数相同的字母。例如,除非您这样做,否则“a”和“A”的行为会有所不同。

标签: javascript hashtable


【解决方案1】:

因为

count[char] += 1

等于

count[char] = count[char] + 1

第一次运行代码时,count[char]undefined,所以它几乎和

undefined + 1 // which is NaN

工作版本通过使用|| 运算符安全地添加0 来规避这种情况。

【讨论】:

    【解决方案2】:

    最初,count 是一个空对象,因此它没有 char 属性。因此,count[char] 返回undefined

    undefined + 1 产生NaN

    因此,您必须将其初始化为0 才能使其正常工作。

    †:count 并不是真正的空对象,因为它继承了 Object.prototype 的属性。如果在那里定义了char 属性,那将是有问题的。我建议改用count = Object.create(null)

    【讨论】:

    • 没什么可补充的,在我看来这个问题已经回答了。
    【解决方案3】:

    在递增之前,您需要将 count[char] 初始化为零。

    【讨论】:

      【解决方案4】:

      第一次出现时count[char] 未定义且undefined += 1 !== 1

      【讨论】:

        【解决方案5】:

        正如其他人所说,您的变量一开始没有初始化 所以 count[char] +=1 不起作用,但是当你这样做时 (count[char] || 0) 你实际上告诉他们如果变量为“false”,你想设置 0。 False 可能意味着未定义,NaN,0。

        【讨论】:

          猜你喜欢
          • 2020-05-21
          • 1970-01-01
          • 2015-06-13
          • 1970-01-01
          • 1970-01-01
          • 2015-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多