找到字符串中字符的第二高频率

时间:2014-03-10 04:09:33

标签: c# dictionary

我想找到字符串中字符的第二高频率。 例如:abccddd

O / p应该是:c

我试过字典。我将所有内容存储在字典中。而且,我也在整理它。现在我不知道该怎么办。

string input = tb_input.Text;
Dictionary<string, int> di = new Dictionary<string, int>();

for (int i = 0; i < input.Length; i++)
{
    if (di.ContainsKey(input[i].ToString()))
    {
        int value = di[input[i].ToString()];               
        value++;

        di[input[i].ToString()] = value;
    }
    else
    {
        di.Add(input[i].ToString(), 0);
    }
}

var items = di.Values.ToList();

items.OrderByDescending(x => x).ToList();

1 个答案:

答案 0 :(得分:5)

您只存储items中的出现次数。你也应该存储角色:

var items = di.OrderByDescending(x => x.Value).ToList();

return items[1].Key;

另外,为什么从0开始?您可能应该将1添加到字典中,当它还没有存在时:

else
{
    di.Add(input[i].ToString(), 1);
}

<强>更新

只是为了让您知道,可以使用LINQ轻松解决:

return input.GroupBy(x => x).OrderByDescending(x => x.Count()).ElementAt(1).Key;