【发布时间】:2012-04-27 04:18:28
【问题描述】:
我目前正在寻找一种简单轻量级的算法来比较两个简单的字符串。
例如,如果我们采用这两个字符串:
- “敏捷的棕狐跳过懒狗”
- “挑剔的棕色狐狸扑倒了疯狗”
它应该告诉我第二个单词的 2 个首字母不同,等等。
现在我有一个非常简单的算法来比较单词:
/// <summary>
/// Make a diff between two strings and returns words indices
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
public static List<int> Diff(string a, string b)
{
List<int> indices = new List<int>();
string[] asplit = a.Split(' ');
string[] bsplit = b.Split(' ');
for (int i = 0; i < asplit.Length; i++)
{
if (bsplit.Length > i)
{
if (asplit[i].CompareTo(bsplit[i]) != 0)
{
indices.Add(i);
}
}
}
return indices;
}
所以这将告诉我哪些单词(使用空格字符拆分)是不同的。
我在这里阅读了很多关于实现复杂算法或使用现有库的主题。
但我接受了 .NET compact framework (WP7) 的再培训,我不想要可以比较两个文件或两个文本的东西,我只需要一个单词比较。
有没有适合的库或算法? 谢谢:)。
【问题讨论】:
-
如果一个词被插入其中一个句子的中间,从而导致匹配出现偏差怎么办?它应该报告不同的每个后续单词吗?
-
解决这个问题的标准方法是实现最长公共子序列算法。这是一个非常简单的算法。我在这里有一个 JScript 实现:blogs.msdn.com/b/ericlippert/archive/2004/07/21/189974.aspx 将其转换为 C# 留作练习。
-
@James Michael Hare :假设我有“my little pony”和“my sweet little pony”,它应该只报告“sweet”。我认为我过于简单的算法为此失败了。
-
@eric-lippert 感谢您分享您的代码。我会尝试弄清楚它是如何工作的,以及它是否对我有帮助。
标签: c# windows-phone-7 diff