文本的C#Diff算法

我正在寻找一种差异算法,它将产生类似SO的编辑修订页面的结果。 我或多或少刚开始寻找,我不反对自己做,但我不需要重新发明轮子。

我将使用C#4.0。 我基本上有两个字符串,旧字符串和新字符串。 我想通过突出显示和突破来了解新增内容的变化。

它基于Longest common subsequence算法,俗称LCS

旧文本和新文本的LCS给出了保持不变的部分。 因此,不属于LCS的旧文本部分是已更改的部分。

从上面的维基页面:

它是一个典型的计算机科学问题,是diff (一个输出两个文件之间差异的文件比较程序)的基础,并且在生物信息学中有应用。

您可以查看Menees Diff以获取用C#编写的示例。

通常使用最长的公共子串算法实现。 这篇文章很有意思。

我发现Google已经发布了包含c#类和测试代码的diff,match和patch代码。 代码不是很难使用恕我直言。

https://code.google.com/archive/p/google-diff-match-patch/

这里有详细记录:

https://code.google.com/archive/p/google-diff-match-patch/wikis/API.wiki

我发现这篇文章很容易遵循清晰的代码和简单的例子。 我只读过它,我还没有实现它。

  1. 文章系列概述,使用的算法概述。
  2. 最长公共子串实现。
  3. Diff实现。