1

在将其标记为重复之前,请阅读此处的详细信息。

示例 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 的一部分”几乎相同?

4

4 回答 4

2

正如我在评论中所述.. Levenshtein Distance 算法(和类似的)计算字符串之间的差异并返回一个数值结果(wiki:http ://en.m.wikipedia.org/wiki/Levenshtein_distance )。

但是,我肯定会为这些算法应用基准测试和缓存策略。它们的输入量很小。但是当我实现它时,我必须确保我缓存结果/查找。您的大型示例不会执行“快速”..取决于您的用例的“快速”。

于 2013-09-11T08:34:53.723 回答
1

You can use string.compare, Find below few examples which may help you.

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);
于 2013-09-11T08:39:31.620 回答
0

您正在寻找的东西看起来像一个带有评分的搜索引擎。

我使用 Levenshtein Distance 方法来搜索/比较看起来相同但不是的字符串。

以下链接中有一个示例:

http://www.dotnetperls.com/levenshtein

于 2013-09-11T08:50:19.760 回答
0

我正在回答我自己的问题。

我正在寻找一种解决方案,将一个字符串与另一个字符串进行比较,其中字符串 A与“字符串 B 的一部分”几乎相同

这就是我解决问题的方法。

  1. 我应用了“最长公共子串”算法,并在两个字符串之间建立了最长的公共子串。

  2. 然后我使用“Levenshtein 距离算法”将我的字符串 A 与步骤 1 中找到的“最长公共子字符串”进行比较。

  3. 如果步骤 2 中提到的算法的可用结果高于某个阈值,则意味着字符串 A 存在于字符串 B 中。

  4. 问题解决了

我在这个问题上工作了一天,我发现这个问题的结果不错。

于 2013-09-12T05:10:46.143 回答