社区
C#
帖子详情
求去除字符串内字符最快算法
simonw
2006-10-15 01:41:36
2个字符串a,b, 要求去除b中所有包含在a内的字符, 最快算法, 不限空间.
...全文
152
8
打赏
收藏
求去除字符串内字符最快算法
2个字符串a,b, 要求去除b中所有包含在a内的字符, 最快算法, 不限空间.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shrinerain
2006-10-16
打赏
举报
回复
将字符串a排序,使用堆排序(空间换时间)
遍历字符串b,对a进行二分查找,如果找到删除相应字母,并用一个int[26]的数组保存删除字母,比如'a'删除了,就将int数组第0位置1,删除'b'就将第一位置1.遍历下一个字母先查看数组,为0的话再对a进行二分查找,为1的话说明以前删除过,继续下一个。
Nara
2006-10-16
打赏
举报
回复
用HashTable对a,b中较长的字符串建索引,再在另一个字符串中用此表进行顺序查询,O(Min(a.length, b.length))
simonw
2006-10-15
打赏
举报
回复
楼上各位误解我的意思了吧, 这是算法题, 不是语言题.
青官司
2006-10-15
打赏
举报
回复
哦 可能
winner2050
2006-10-15
打赏
举报
回复
楼上,你测试的数据太小了。
StringBuilder 比string快22倍是大概数,随处理量大而变得更大,如果很小,那么基本没有区别。
青官司
2006-10-15
打赏
举报
回复
// 睡不着 无聊写段代码测着玩
//
// 本来以为转化为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();
}
因为自己的电脑属于上个世纪的产品 性能太差 没有做更长字符串的测试
加上刚学没多久 水平跟电脑性能一样差 不敢保证测试的正确性
winner2050
2006-10-15
打赏
举报
回复
StringBuilder winner = new StringBuilder();
赋值
winner.Replace("a","");
速度比string的快22倍
simonw
2006-10-15
打赏
举报
回复
顺便写上时间复杂度
判断
字符
串
是否为回文
字符
串
的Python
算法
实现
以上就是使用Python编写的判断
字符
串
是否为回文
字符
串
的
算法
实现。通过比较
字符
串
的对应位置
字符
,我们可以快速判断一个
字符
串
是否为回文
字符
串
。要判断一个
字符
串
是否为回文
字符
串
,我们可以比较
字符
串
的第一个
字符
...
字符
串
匹配
算法
字符
串
匹配
算法
字符
串
匹配
算法
朴素
字符
串
匹配
算法
Rabin-Karp
算法
有限自动机
算法
KMP
算法
笔面高频题 单词间的逆序调整 前n
字符
后移 两字
字符
按照字典序最小拼接 判断两个
字符
串
是否互为旋转词朴素
字符
串
匹配
算法
/...
算法
题解(
字符
串
篇)
反转
字符
串
- 12.2541. 反转
字符
串
II - 12.3剑指 Offer 05. 替换空格 - 12.3151. 翻转
字符
串
里的单词 - 12.3 *344. 反转
字符
串
- 12.2 344. 反转
字符
串
编写一个函数,其作用是将输入的
字符
串
反转过来。输入
字符
串
...
怎么样去掉scratch中的
字符
串
的第一个
字符
?/scratch巧妙去掉
字符
串
数最开头0/
字符
串
算法
操作/
字符
串
的逆序/变量逆序
首先我们省去判断的部分,假设这个
字符
串
第一位一定是0,我们只需要去掉他即可。 如果这个
字符
串
除了第一位是0,第二位是其他数字,比如02365。那么我们只要把这个
字符
串
直接减0就可以。scratch会自动把
字符
串
转换...
c++刷
算法
【
字符
串
】
与Java的String对比:在Java文档中将String类对象称为不可变
字符
串
,Java
字符
串
中的
字符
是不能修改的。这一点和C++不同,C++中
字符
串
时可以修改的。 在C语言中,把一个
字符
串
存入一个数组时,也把结束符 '\0’存入...
C#
110,533
社区成员
642,574
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章