加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 07:43:03 所属栏目:百科 来源:网络整理
导读:我试图逐个区分两个字符串,类似于StackOverflow在版本编辑页面上对两个字符串进行区分的方式.这样做的算法是什么?是否有宝石或其他标准库可以实现这一目标? 编辑:我已经看到其他差异算法(Differ与Ruby),他们似乎导致以下结果: o = 'now is the time when
我试图逐个区分两个字符串,类似于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停止有意义的边缘情况.>你需要特殊处理标点符号.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读