在将此标记为重复之前,请在此处阅读详细信息。
示例1:
String A: The seven habits of highly effective people.
String B: "This is a sample text. There is only one product in it. It is a book. The book is The seven habits of highly effective people."
示例2:
String A: The seven habits of highly effective people.
String B: "This is a sample text. There is only one product in it. It is a book. The book is The seven habits of highly effective peopl."
现在用类似的代码解决上面的例子
B.Contains(A)
会给出正确的结果。但是,相同的代码将返回“false”作为示例2中的输出。
如何解决此问题?
示例2中缺少“e”,我知道它,这就是问题所在。如何将一个字符串与另一个字符串进行比较,其中字符串A几乎与“字符串B的一部分”相同?
答案 0 :(得分:2)
正如我的评论中所述...... Levenshtein距离算法(和类似的算法)计算字符串之间的差异并返回数值结果(wiki:http://en.m.wikipedia.org/wiki/Levenshtein_distance)。
但是,我肯定会对这些算法应用基准测试和缓存策略。它们很小,输入很小..但是当我实现它时,我必须确保我缓存结果/查找。您的大型示例将无法执行“快速”..取决于您的用例的“快速”。
答案 1 :(得分:1)
您可以使用string.compare
,在下面找到一些可能对您有用的示例。
string a = "a";
string b = "b";
int c;
c = string.Compare(a, b);
Console.WriteLine(c);
c = string.CompareOrdinal(b, a);
Console.WriteLine(c);
c = a.CompareTo(b);
Console.WriteLine(c);
c = b.CompareTo(a);
Console.WriteLine(c);
答案 2 :(得分:0)
您正在寻找的内容看起来像是一个有得分率的搜索引擎。
我使用Levenshtein Distance方法来搜索/比较看起来相同但不相同的字符串。
以下链接有一个例子:
答案 3 :(得分:0)
我正在回答我自己的问题。
我一直在寻找一个解决方案,将一个字符串与另一个字符串进行比较,其中字符串A 几乎相同 ,其中部分字符串B “。
这就是我解决问题的方法。
我应用了“Longest Common Substring”算法并成立了 两个字符串之间最长的公共子字符串。
然后我使用“Levenshtein距离算法”将我的字符串A与步骤1中找到的“最长公共子字符串”进行比较。
如果步骤2中提到的算法的结果是 超过某个阈值,则表示字符串A存在于字符串B中。
解决了问题。
我已经解决了这个问题一天,我找到了不错的结果。