2个字符串a,b, 要求去除b中所有包含在a内的字符, 最快算法, 不限空间.
解决方案 »
- 服务器端安装 VSS 2005时报错.The server configuration settings apply only for local datab
- 请问如何设置一个这样的winfrom窗口程序?
- 使用VS2008连接Oracle数据库的时候报System.Data.OracleClient需要oracle客户端版本8.1.7或更高版本
- C#.NET 如何实现双表头
- 讨论:.net实现c/s三层结构的模型
- 使用C#编写SQL数据库自动更新程序的难题!
- 数据库问题,高手点播下
- WPF XAML 中的控件 如何设定成PUBLIC
- 菜鸟问题,多谢各位大侠
- 求救c#的基本问题
- Textbox 的计算
- 简单问题,这样的xml怎么写
赋值
winner.Replace("a","");速度比string的快22倍
//
// 本来以为转化为char再替换会是最快的方法 结果大失所料
private void button1_Click(object sender, System.EventArgs e) {
string str1 = "abcdefghijklmnopqrstuvwxyz";
string str2 = "ab";
StringBuilder str3 = new StringBuilder();
bool isExist; for (int i = 0; i < 15; i++) { str1 += str1; } char[] ch1 = str1.ToCharArray();
char[] ch2 = str2.ToCharArray(); DateTime dt1 = DateTime.Now;
// start
foreach (char c1 in ch1) {
isExist = false; foreach (char c2 in ch2) {
if (c2 == c1) {
isExist = true;
break;
}
} if (!isExist)
str3.Append(c1);
}
// end
this.button1.Text = (DateTime.Now.Ticks - dt1.Ticks).ToString();
}private void button2_Click(object sender, System.EventArgs e) {
string str1 = "abcdefghijklmnopqrstuvwxyz";
string str2 = "ab";
string str3 = string.Empty; for (int i = 0; i < 15; i++) { str1 += str1; } DateTime dt1 = DateTime.Now;
// start
str3 = str1.Replace(str2, string.Empty);
// end
this.button2.Text = (DateTime.Now.Ticks - dt1.Ticks).ToString();
}
// 本来相信楼上的结果 因为一直以为用StringBuilder会比频繁更改string得到更好的性能
// 顺便试了一下 但我测不出22倍的差距
private void button3_Click(object sender, System.EventArgs e) {
string str1 = "abcdefghijklmnopqrstuvwxyz";
string str2 = "ab";
string str3 = string.Empty;
StringBuilder sb = new StringBuilder(); for (int i = 0; i < 15; i++) { str1 += str1; } sb.Append(str1); DateTime dt1 = DateTime.Now;
// start
sb.Replace(str2, string.Empty);
// end
this.button3.Text = (DateTime.Now.Ticks - dt1.Ticks).ToString();
}因为自己的电脑属于上个世纪的产品 性能太差 没有做更长字符串的测试
加上刚学没多久 水平跟电脑性能一样差 不敢保证测试的正确性
遍历字符串b,对a进行二分查找,如果找到删除相应字母,并用一个int[26]的数组保存删除字母,比如'a'删除了,就将int数组第0位置1,删除'b'就将第一位置1.遍历下一个字母先查看数组,为0的话再对a进行二分查找,为1的话说明以前删除过,继续下一个。