任意n条字符串,每条字符串包含m个字符,现在要求把字符串包含相同的合并。得出他们最大的并集。
例如:
a ,b,c
b,e,d
f,g,h合并之后
a,b,c,d,e
f,g,h请问算法怎么写,难道用list<ArrayList>两条两条的遍历合并?还有什么比较快的方法?
例如:
a ,b,c
b,e,d
f,g,h合并之后
a,b,c,d,e
f,g,h请问算法怎么写,难道用list<ArrayList>两条两条的遍历合并?还有什么比较快的方法?
解决方案 »
- 读取xlsx文件的时候,为什么用DataTable只能获取到255列呢?我需要读取到后面的列
- 请教怎么清空非绑定数据DataGridView
- C#中Dictionary<object,object>,如果键为对象时,怎么比较!
- 为什么有时发出的邮件中会出现半句话是乱码,如何解决。邮件的其它所有部分都是正常的,就像下面这样:
- 百分求对post get的理解,怎么样使用post传值(帮顶有分)
- 关于DataGridView 列标题自动折行的问题
- 请问可以用程序代替键盘输入吗?具体请进。。
- XP下编译的软件在win7下不能用
- 现在有多少公司用.net?主要用他们做什么?(清讲真话)
- 利用WebService上传文件,如何获取上传进度??
- c#快捷键显示和隐藏窗体
- 在Datelist中获取checkbox被选中几项
bool[] masks = new bool[128];然后对取出的每个字符c进行打勾:
masks[(int)c] = true;最后masks中标记为true即为你要的并集
for(int i=0; i<masks.Length; i++)
{
if( mask[i] ) Console.WriteLine( (char)i );
}
这个不错!另:可以把所有字符放到一个list里面
可以list.sort()做下排序。然后消除掉重复值。
那可未必,仅当你在一个循环里进行超过 600 次的字符串连接时,使用 StringBuilder 来获得更好的速度。这里需要提醒的是,你所处理的字符串的长度也会影响最终的速度,同样会影响垃圾收集器的效果,所以你应该根据你实际的代码具体问题具体分析
少量的话用正则很方便。string[] array = new string[] {
"a,b,c",
"b,e,d",
"f,g,h"
};
string all = String.Join(",", array);
Console.WriteLine(Regex.Replace(all, @"(?:^|,)([^,]+)(?=,.*?\1)", "").TrimStart(','));
string[] array = new string[] {
"a,c,b",
"b,e,d",
"f,g,h",
"xx,x,xxx"
};
string all = String.Join(",", array);
Console.WriteLine(Regex.Replace(all, @"(?:^|,)([^,]+)(?=(,.+)*,\1(?:,|$))", "").TrimStart(','));