C#文本差异算法

16
我正在寻找一种差异算法,它将产生类似于Stack Overflow编辑修订页面的结果。我刚开始寻找,虽然我不排斥自己动手做,但我不需要重新发明轮子。
我将使用C# 4.0。我基本上有两个字符串,一个旧的和一个新的。我想知道新的有什么变化,并用高亮和删除线标出。
4个回答

8

6

这是基于最长公共子序列算法,通常被称为LCS

旧文本和新文本的LCS给出了未改变部分。因此,旧文本中不属于LCS的部分就是被更改的部分。

来自上面的维基页面:

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


5
您可以查看使用C#编写的示例,Menees Diff

3

4
不是最长公共子串(substring),而是最长公共子序列(subsequence)。子串始终是连续的,但子序列不需要连续。为获得新文本而对旧文本所做的更改不必在连续字符上进行。 - codaddict
同意。您需要区分最长公共子序列问题和最长公共子串问题。 - quantity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接