你的位置:首页 > ASP.net教程

[ASP.net教程]c#使用Dictionary统计字符串中出现次数最多字符


最近在找工作,遇到这样一道面试题:

对于给定的一个字符串,统计出该串中各个字符出现的次数,并打印出出现次数最多的那个字符

因为本人是个菜鸟,所以当时写的思路是用递归

 

/*str 字符串, strA 第一个字符, strB数量最多的字符,MaxNum数量*/
static void GetLength(string str, string strA, string strB, int MaxNum)
{
  if (str.Length <= 0)
  {
    Console.WriteLine(strB);
    return;
  }

 

  strA = str.Substring(0, 1);
  int Num = 0;
  string strReplace = "";
  strReplace = str.Replace(strA, "");
  Num = str.Length - strReplace.Length;
  if (Num > MaxNum)
  {
    strB = strA;
    MaxNum = Num;
  }
  GetLength(strReplace, strA, strB, MaxNum);

 

}

 

但是后来,问了一些朋友,说递归算法其实效率会很低,用map就行了。于是,使用c#的Dictionary来实现了字符串统计

string str = "jintiantianqihaoqinglang";
Dictionary<char,int> dic=new Dictionary<char,int>();
foreach (char ch in str)
{
  if (dic.Keys.Contains(ch))
  {
    dic[ch]++;
  }
  else
  {
    dic.Add(ch, 1);
  }

}

再取dic中values值最大的key即为出现次数最多的字符

我写的不是最好的方法,也希望各位大神多多提意见,嘻嘻,不过不喜勿喷!!!!