【发布时间】:2011-01-13 23:02:14
【问题描述】:
假设我有一个简短的字符串列表,其中可以包含重复项:
然后假设我有一些其他字符串列表,它们可能是也可能不是原始列表的子集。我需要知道:
- 第二组是否“覆盖”了第一组(例如,第一组中的每个项目是否也包含在第二组中)?
- 如果 1 为真,那么重新创建第一个集合需要多少个第二个集合的实例?
所以,在这种情况下,如果我的第二组是列表:,我会得到 TRUE 和 2。
如果是列表:,我会得到 FALSE。
如果我的第一个是:
- 第二个是:返回 TRUE 和 4。
- 第二个是 :返回 TRUE 和 3。
我知道这可以使用嵌套循环在 N x M 时间内轻松完成。但我正在寻找一种简洁和/或优化的(最好是基于 Linq 的)解决方案。我玩过 Linq.Except,但问题是它只返回不同的元素,因此在比较包含重复项的字符串列表时没有用。
有人有什么独特的想法吗?
【问题讨论】:
-
像往常一样...有什么限制?你说你有一个字符串列表,但在你的例子中你给出了字符(这可能会产生误导)。那么这些是唯一字符还是这些字符串?列表可以有多大?假设您有“其他一些字符串列表”...说,还有多少其他的?多大?您是否想要一个不考虑您正在使用的机器(您的计算机)的物理限制的理论解决方案?
-
第一个是简单的
Intersect两组。并询问相交是否等于您的第一个列表的一组(所以没有重复)。 -
@Syntax,它们是字符串。为了简洁起见,我只是在示例中使用了字符。列表很短,通常不超过 10 个。其他列表的数量各不相同,但也少于 10 个。不需要理论解决方案,只是想知道是否有人有一个聪明和/或简洁的代码 sn-p 可以解决这个问题.
标签: c# algorithm performance pattern-matching