从一个字符串中找出出现频率最高的字符

hty_1984 2009-09-24 12:33:42
例如:bacea,找出是a,频率是2
abab,找出是a,2或b,2
...全文
680 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
mading0817 2012-10-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

C# code


int[] x = new int[26];
char[] ca = str.toCharArray();
for(int i=0;i <ca.length;i++){
x[ca[i]-'a']++;
}

for(int i=0;i <ca.length;i++){
System.out.println("字符"+(char)('a'+i)+"出现了"+ca[i]+"次"……
[/Quote]膜拜!!!!!
兔子侠客 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
C# code

public static Hashtable CharSameCount(string Str)
{
char[] TempArray = Str.ToCharArray();
ArrayList nStr = new ArrayList();
for (int ……
[/Quote]
+1
q107770540 2012-03-28
  • 打赏
  • 举报
回复

var query="bacea".ToCharArray().GroupBy(x=>x)
.OrderByDescending(g=>g.Count())
.Select(g=>new{g.Key,cnt=g.Count()})
.FirstOrDefault();
Console.WriteLine("{0} 出现 {1} 次",query.Key,query.cnt);
//a 出现 2 次
q107770540 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
例如:bacea,找出是a,频率是2
abab,找出是a,2或b,2
[/Quote]
var query="bacea".ToCharArray().GroupBy(x=>x)
.OrderByDescending(g=>g.Count())
.Select(g=>new{g.Key,cnt=g.Count()})
.FirstOrDefault();
wllper 2012-03-28
  • 打赏
  • 举报
回复
x[ca[i]-'a']++; 不知道这句什么意思..不会看java 代码...

6楼的思路是很好的.通过替换为空,去除对应的字符,然后比较字符串的前后长度变化,就知道该字符
出现的次数了.
然后保存在变量中 返回,人家题目是只需要最多的字符 和次数而已. 不需要哈希表..
amdgaming 2009-09-24
  • 打赏
  • 举报
回复


int[] x = new int[26];
char[] ca = str.toCharArray();
for(int i=0;i <ca.length;i++){
x[ca[i]-'a']++;
}

for(int i=0;i <ca.length;i++){
System.out.println("字符"+(char)('a'+i)+"出现了"+ca[i]+"次");
}

给你一个 java的代码 比6楼效率不知到高多少倍
CHN_smallfox 2009-09-24
  • 打赏
  • 举报
回复
楼上好方法~
风之影子 2009-09-24
  • 打赏
  • 举报
回复
        public static Hashtable CharSameCount(string Str)
{
char[] TempArray = Str.ToCharArray();
ArrayList nStr = new ArrayList();
for (int i = 0; i < TempArray.Length; i++)
{
if (!nStr.Contains(TempArray[i]))
{
nStr.Add(TempArray[i]);
}
}
char[] newStr = (char[])nStr.ToArray(typeof(char));

Hashtable ht = new Hashtable();
for (int count = 0; count < newStr.Length; count++)
{
string tempStr = Str.Replace(newStr[count].ToString(), "");//在此进行字符串字符替换为空
ht.Add(newStr[count], Str.Length - tempStr.Length);//原长度减替换后的长度
Str = tempStr;
}
return ht;//返回字符串中每个字符个数的哈希表。
}


以下是调用:
            string x = "bacea";
foreach (DictionaryEntry a in CharSameCount(x))
{
MessageBox.Show("字符:"+a.Key.ToString()+" 数量:"+a.Value.ToString());
}
风之影子 2009-09-24
  • 打赏
  • 举报
回复
还没有写出来吗?

要不我也来贴一个,下午下班前搞了个。
hnjhjzyyxgs 2009-09-24
  • 打赏
  • 举报
回复
把字符串拆分成一个个字符,统计
kkxxlq 2009-09-24
  • 打赏
  • 举报
回复
开一个长度为26的数组s,碰到a则s[1]++,碰到b则s[2]++,以此类推,最后扫过这个数组比较哪个值最大即可
zhoujk 2009-09-24
  • 打赏
  • 举报
回复
拆分成字符串数组,然后进行遍历统计。第二个方法:直接排序
hty_1984 2009-09-24
  • 打赏
  • 举报
回复
代码

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧