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

use*_*810 2 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();
Run Code Online (Sandbox Code Playgroud)

Mar*_*zek 5

你只存储了出现次数items.你也应该存储角色:

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

return items[1].Key;
Run Code Online (Sandbox Code Playgroud)

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

else
{
    di.Add(input[i].ToString(), 1);
}
Run Code Online (Sandbox Code Playgroud)

更新

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

return input.GroupBy(x => x).OrderByDescending(x => x.Count()).ElementAt(1).Key;
Run Code Online (Sandbox Code Playgroud)