c# – 什么是以与版本页面上的SO相同的方式对两个字符串进行区分的算法?

前端之家收集整理的这篇文章主要介绍了c# – 什么是以与版本页面上的SO相同的方式对两个字符串进行区分的算法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图逐个区分两个字符串,类似于StackOverflow在版本编辑页面上对两个字符串进行区分的方式.这样做的算法是什么?是否有宝石或其他标准库可以实现这一目标?

编辑:我已经看到其他差异算法(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,它可以为您完成大部分工作.

大纲是这些方面的东西.

>按字分割(输入,输出)
>在输入/输出阵列上计算LCS.
>遍历阵列并智能地连接区域.

例如,你说你有:

“你好世界这是一个考验”

和….相比:

“先生你好世界”

LCS的结果是

>“先生”
>“你好”=
>“世界”=
>“这个” –
>“是” –
>“a” –
>“测试” –

现在你在建立时撒上特制的酱汁.您将字符串连接在一起,同时保持对前一个操作的注意.朴素算法只是连接相同动作的部分.

>“先生”
>“你好世界”=
>“这是一个考验” –

最后你将它转换为html:

<ins>mister</ins> hello world <del>this is a test</del>

当然魔鬼在细节上:

>您需要考虑如何处理标签>你比较markdown或html>是否存在UI停止有意义的边缘情况.>你需要特殊处理标点符号.

原文链接:https://www.f2er.com/csharp/99261.html

猜你在找的C#相关文章