一个算法,如何快速的从一个大字符串数组里面删除一个小的字符串数组的内容

cxj_2000 2003-03-16 07:03:50
比如 A字符串数组里面含有B数组,我想从A里面删除B里面的东西

例如:A为"1","2","3","4","5","6"

B为:"1","5","3"

我要得到A中在B中不存在的字符,

怎么样一个算法才是最快的?
...全文
70 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bjzhanghao 2003-03-17
  • 打赏
  • 举报
回复
对不起,我上面说得有问题,呵呵。

“这时判断a中一个元素是否在b中平均要O(n/2)=O(n)”
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~不用O(n)那么长,比如二分法搜索就是O(logn),所以排序后总共时间代价为O(2nlogn)=O(nlogn)<O(n^2),前提是选择合适的排序算法和搜索算法。
cxj_2000 2003-03-17
  • 打赏
  • 举报
回复
shine333(shine)

还是比较好的办法
bjzhanghao 2003-03-17
  • 打赏
  • 举报
回复
我觉得排序并不节约时间,按排序的时间代价为O(nlogn)来算(快速排序),这时判断a中一个元素是否在b中平均要O(n/2)=O(n),总共判断n次,所以总共的时间代价为O(nlogn)+O(n^2)=O(n^2),而不排序的代价也是O(n^2)。
cxj_2000 2003-03-17
  • 打赏
  • 举报
回复
谢谢大家,揭帖
fightboy 2003-03-16
  • 打赏
  • 举报
回复
大数组排序,小数组排序
然后删除
我觉得这样快点
因为排序的时间复杂度小于O(n**2)
我记得是O(n*logn/log2)
所以这样快
shine333 2003-03-16
  • 打赏
  • 举报
回复
查找好象只能用两个循环。
我本来想将A合并成一个String,用indexOf,但是还要考虑到
{"abc","defg","hijk","lmn"}
{"defg","cde"}这样的问题。
如果你能保证这种情况很少发生,那么这可能会快一点。
cxj_2000 2003-03-16
  • 打赏
  • 举报
回复
唉,也只有用这样的方法了,其实我想快一点的,呵呵
shine333 2003-03-16
  • 打赏
  • 举报
回复
如果想代码简单
放到Vector之类去,
Vector av=new Vector(); Vector bv=new Vector();
for(int i=0;i<a.length;i++){
av.add(a[i]);
}
...//b too.
av.removeAll(bv);


cxj_2000 2003-03-16
  • 打赏
  • 举报
回复
难道没有更好的办法吗?
bjzhanghao 2003-03-16
  • 打赏
  • 举报
回复
没想出特别好的办法,只能二重循环,对a里每个元素,如果不在b里则加到数组c里,最后把a值向c

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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