我正在尝试自己创建某种基于字符串的diff算法。 我正在做的是:我正在遍历我的文本文档中的每个段落,并将它们进行比较。
现在我正在努力的是两个字符串的比较开始和结束。
考虑使用两个字符串:
This is a test-text.
This is a very long test-text.
这意味着第二行('very long '
)中有10个字符(9个文本,1个空格)的更改。
应相应地突出显示这些字符。我已经找到了找到字符串差异开始的解决方案(例如:索引n是差异开始的地方):
int diffIndexStart = localText.Zip(serverText, (c1, c2) => c1 == c2).TakeWhile(b => b).Count();
现在我怎么能检测到字符串何时再次匹配,所以我可以停止在那里突出显示,而不是突出显示行的其余部分(从diffIndexStart
开始)。
还有另外一个问题:当一行内有多处变化时,我们会说:
This is a test-text.
This, apparently, is a very long test-text.
现在我有两项更改:, apparently,
和very long
。
答案 0 :(得分:0)
您正在查看常见的Longest Common Subsequence (LCS) problem。有很多论文(维基百科页面以一些链接为开头),已经在Wiki中突出了几种常见的方法。