


























最近开始着手研究一下字符串的效率问题,大致了解了一下常规提高性能的方法。现在考虑以前碰到的一个题目:有一个很长的字符串,需要统计其中字母的出现频率。
我的大致思路是:
1 不管怎么样,都得循环一遍,最好能保证循环一遍就统计完
2 在循环的时候,涉及到对比的情况
比如,循环碰到字符f,起码f当前的次数有个存储的地方,另外就是要更新当前的出现次数,首先在缓存的地方找到对应的位置
按照我的想法,主要在2里面提高效率了。正常写法,每循环一个字符,然后在对比26遍(假设主要小写字母,然后更新当前字符出现的频率!
目前我想到的就是用哈希表,相当于直接定位,统计! 程序性能如下:
大约是 543w的字符长度,用了375毫秒,测试代码如下:
public static void Test()
{
DateTime a=DateTime.Now;
Console.WriteLine(string.Concat("开始",a.ToString("yyyy-MM-dd hh:mm:ss")));
int lenght;
string strFilePath="c:\\11.txt";
StreamReader reader=null;
reader
=new StreamReader(strFilePath);string str =reader.ReadToEnd();//增加点长度DateTime b
=DateTime.Now;Console.WriteLine(
string.Concat("总长为", lenght.ToString(), "的字符串中出现次数最多的字符是", cs, "次数为", max.ToString(), "用时", b.Subtract(a).Milliseconds.ToString(), "毫秒"));
估计应该还有更好得算法。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。