string - 如何标记两个字符串之间的差异

标签 string algorithm

我想要一个能够直观地标记两个字符串之间差异的函数。

示例1:

输入:

  • 堆栈溢出
  • 堆栈溢出

输出:

  • 堆栈溢出
  • 堆栈溢出[ing]

示例2:

输入:

  • 重新堆叠溢出
  • 堆栈 Ooooverflow

输出:

  • [Res]大头钉[]溢出
  • [S]tack[-]O[ooo]verflow

我已经搜索了很多,但最终总是得到文件比较函数。我想可视化字符串之间的差异。我发现的一个例子是 https://text-compare.com (这正是我所需要的),但它似乎使用服务器端代码。

语言并不重要,JavaScript、Python,但任何如何解决这个问题的指示都会很好。

我不一定要寻找实现;我宁愿有一些网站的链接,因为这不是一个基本问题。也不太难,但你想把它做好。

最佳答案

这个问题可以通过查找longest common subsequence来解决(LCS) 的两个字符串,然后仅将不属于 LCS 的部分放在方括号内。

例如,Stack OverflowStack ooverflowing 的 LCS 为 Stack verflow,因此第一个字符串将呈现为 Stack [O]verflow,第二个为 Stack [oo]verflow[ing],因为这些是 LCS 中不存在的部分。

有一个standard dynamic programming algorithm用于计算维基百科上描述的LCS,以及各种optimisations该算法在实际情况下加速了它。每个字符串中不存在于 LCS 中的部分可以通过维护字符串中当前索引和 LCS 中当前位置的另一个索引的简单循环来找到。

关于string - 如何标记两个字符串之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59772188/

相关文章:

Java 写入文件。使用循环

c# - 判断一个字符串中的所有字符是否相同

java - 如何比较原始类型中忽略大小写的字符

javascript - JS 正则表达式仅适用于第一个字母,但如果单词只有两个字母,则保持 AND 数字不变

浏览器用于在网页中搜索单词的算法

java - RSA 算法适用于 Android 4.3,但适用于 Android 2.3.3

java - 将一个字符串放入另一个字符串java

c - 打乱 5 元素数组以每次获得单独的顺序 C

algorithm - 为什么Leetcode的 "Meeting Rooms 2"数组要先排序?

string - $在字符串中的含义?