假设我不想用了十几个外部库以上或代码,使多余的线(即清晰的代码,不代码高尔夫球代码),我可以做的比string.Contains
更好处理一组输入字符串和一组关键字来检查?C#高效的子串有很多投入
显然,人们可以使用objString.Contains(objString2)
做一个简单的子字符串检查。但是,在特殊情况下,有许多着名的算法能够做得比这更好,特别是在使用多个字符串的情况下。但是将这样的算法粘贴到我的代码中可能会增加长度和复杂性,所以我宁愿使用某种基于内置函数的快捷方式。
E.g.输入可以是字符串集合,正面关键字集合和负面关键字集合。输出将是第一批关键词的一个子集,所有这些关键词至少有1个肯定关键词,但是有0个否定关键词。
哦,请不要提及正则表达式作为建议的解决方案。
这可能是我的要求是相互排斥的(没有太多额外的代码,没有外部库或正则表达式,比String.Contains更好),但我想我会问。
编辑:
很多人只提供那些将被打多的使用智能调用包含愚蠢的改进,如果有的话。有些人试图更聪明地呼叫Contains,这完全忽略了我的问题。所以这里有一个解决问题的例子。 LBushkin的解决方案是提供解决方案的一个例子,它可能比标准包含的渐近式更好:
假设您有10,000个长度为5-15个字符,0个否定关键字(这似乎令人困惑)的正关键字和1个1,000,000字符串。检查1,000,000个字符的字符串是否至少包含1个肯定关键字。
我想一个解决方案是创建一个FSA。另一个是划分空间并使用散列。
Whaddaya是指没有正则表达式?这是堆栈溢出...我们使用正则表达式来处理所有事情!它就像胶带一样! – 2009-07-24 18:21:37
@pjabbot:LOL!您忘记了,如果您使用LINQ,则不允许使用RegEx:p – 2009-07-24 18:28:23
不清楚关键字是否必须是“单词”(用空格分隔)或者它是否是字面上的搜索字符串。 – Doug 2009-07-24 18:31:53