我想找到字符串中字符的第二高频率。 例如: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();
答案 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;