作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试按短语区分两个字符串,类似于 StackOverflow 在版本编辑页面上区分两个字符串的方式。执行此操作的算法是什么?是否有 gems 或其他标准库可以实现此目的?
编辑:我见过其他差异算法(Differ 与 Ruby),它们似乎导致以下结果:
>> o = 'now is the time when all good men.'
>> p = 'now some time the men time when all good men.'
>> Differ.diff_by_word(o,p).format_as(:html)
=> "now <del class=\"differ\">some</del><ins class=\"differ\">is</ins>
<del class=\"differ\">time </del>the <del class=\"differ\">men </del>time
when all good men."
请注意每个单词的单词是如何区分的?我想要一些通过短语进行更多差异的方法,所以上面的代码输出:
=> "now <del class=\"differ\">some time the men</del><ins class=\"differ\">is
the</ins> time when all good men."
我是不是希望太多了?
最佳答案
您要查找的算法是Longest Common Subsequence它会为您完成大部分工作。
大纲就是这样的。
例如假设您有:
“你好,这是一个测试”
相比于:
“先生 Hello World ”
LCS的结果是
现在你在 build 时撒上特殊的酱汁。您将字符串连接在一起,同时注意先前的操作。朴素的算法只是连接具有相同 Action 的部分。
最后将其转换为 html:
<ins>mister</ins> hello world <del>this is a test</del>
当然,细节决定成败:
关于c# - 以与 SO 在版本页面上相同的方式区分两个字符串的算法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1371474/
我是一名优秀的程序员,十分优秀!