我想要一个能够直观地标记两个字符串之间差异的函数。
示例1:
输入:
- 堆栈溢出
- 堆栈溢出
输出:
- 堆栈溢出
- 堆栈溢出[ing]
示例2:
输入:
- 重新堆叠溢出
- 堆栈 Ooooverflow
输出:
- [Res]大头钉[]溢出
- [S]tack[-]O[ooo]verflow
我已经搜索了很多,但最终总是得到文件比较函数。我想可视化字符串之间的差异。我发现的一个例子是 https://text-compare.com (这正是我所需要的),但它似乎使用服务器端代码。
语言并不重要,JavaScript、Python,但任何如何解决这个问题的指示都会很好。
我不一定要寻找实现;我宁愿有一些网站的链接,因为这不是一个基本问题。也不太难,但你想把它做好。
最佳答案
这个问题可以通过查找longest common subsequence来解决(LCS) 的两个字符串,然后仅将不属于 LCS 的部分放在方括号内。
例如,Stack Overflow
和 Stack 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/