如何查找3个或更多字符串的公共部分?

时间:2016-06-03 07:04:27

标签: javascript python algorithm difference

Backgound(简化)

我有很多文件,由第三方自动生成(想想几个不同地址合并的输出),我试图以编程方式从中恢复原始模板和地址/自定义数据。< / p>

到目前为止我看过的内容

有很多库(jsdiff,difflib)来区分两个文件。我发现这样做有助于找出更改的%字 - 如果两个文件来自同一个模板,这是一个很好的指示

问题

所以,现在我处于将类似的文本文件组合在一起的阶段,现在我理想地找到一种方法来区分所有这些,将相同的文本与差异分开:

Hello [Mr, Mrs] [NameA, NameB, NameC...], we are pleased to (...)

那么,如何在Javascript / Python中找到3个或更多字符串的公共部分?

1 个答案:

答案 0 :(得分:2)

我认为你需要一个后缀树(wikipedia)。 为每个文档构建后缀树。如果你不关心个别角色,可以随意使用单词而不是字符。

完成此操作后,您需要找到所有(或大多数)单个后缀树中找到的最长路径。因此,只需选择一个,获取所有节点的根并执行DFS,只有在所有(或足够多)树中找到它时,才能进入链接。这将遍历所有文档中常见的所有子字符串。

不确定是否有一个lib已经完成了所有这些,但是应该有一些东西可以帮助你构建后缀树。