如何查找字符串列表的所有常见最长子串

时间:2015-11-06 16:34:56

标签: string algorithm substring longest-substring

我有一个字符串列表,我需要找到所有常见的唯一子串(实际路径),其长度最小。例如:

/a/b/c

/a/b

/a

/d/e/f

/d/e

/g/h

对于此输入,我需要以下结果:

/a

/d/e

/g/h

如您所见,我需要具有唯一前缀的最小长度的路径(或子串)。 / a是以/ a开头的所有路径的最小子字符串。 / d / e是以/ d / e开头的所有路径的最小子字符串。 / g / h也是如此。

这方面的实际应用是找到其中包含特定文件的路径树的所有根,以进一步分析它们。考虑这个例子:

/a/b/c/index.html

/a/b/index.html

/a/index.html

/d/e/f/index.html

/d/e/index.html

/g/h/index.html

让我们说我想拥有包含index.html文件的最顶层(就root而言)路径。因此,我想要" /a/index.html" ;," /d/e/index.html"和" /g/h/index.html"。

有什么想法吗?对于简单的"有很多理论和例子。最常见的子串问题,但我还没有找到一种解决方案来有效地找到所有常见的最长子串。

使用伪代码的解决方案将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

现在有了改进的描述,我认为以下算法可以做到:

  1. 将字符串列表拆分为段列表(字符串数组列表)
  2. 从i = 1开始并在每次迭代时增加它,执行以下操作(步骤3和4),直到段列表中没有其他项目为止:
  3. 将长度为i的所有段数组添加到当前解决方案的列表(如果尚未存在)和最终解决方案的相应路径中。
  4. 从第一个i项与当前解决方案中的某个项目相同的段列表中删除所有项目(然后重置当前解决方案)。