如何找到字符串列表的所有公共最长子字符串
How to find all common longest substrings of a list of strings
我有一个字符串列表,我需要从中找到所有长度最小的常见唯一子字符串(实际上是路径)。示例:
/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 文件的最顶层(就根而言)路径。结果,我想要“/a/index.html”、“/d/e/index.html”和“/g/h/index.html”。
有什么想法吗? "simple"最长公共子串问题有很多理论和例子,但我还没有找到有效找到所有最长公共子串的解决方案。
非常感谢使用伪代码的解决方案。
现在有了改进的描述,我想下面的算法就可以了:
- 将字符串列表拆分为段列表(字符串数组列表)
- 从 i = 1 开始,并在每次迭代时增加它,执行以下操作(第 3 步和第 4 步),直到段列表中没有更多项目:
- 将所有长度为 i 的线段数组添加到当前解决方案的列表(如果还没有)和最终解决方案的相应路径。
- 从段列表中删除前 i 项与当前解决方案中的一项相同的所有项目(然后重置当前解决方案)。
我有一个字符串列表,我需要从中找到所有长度最小的常见唯一子字符串(实际上是路径)。示例:
/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 文件的最顶层(就根而言)路径。结果,我想要“/a/index.html”、“/d/e/index.html”和“/g/h/index.html”。
有什么想法吗? "simple"最长公共子串问题有很多理论和例子,但我还没有找到有效找到所有最长公共子串的解决方案。
非常感谢使用伪代码的解决方案。
现在有了改进的描述,我想下面的算法就可以了:
- 将字符串列表拆分为段列表(字符串数组列表)
- 从 i = 1 开始,并在每次迭代时增加它,执行以下操作(第 3 步和第 4 步),直到段列表中没有更多项目:
- 将所有长度为 i 的线段数组添加到当前解决方案的列表(如果还没有)和最终解决方案的相应路径。
- 从段列表中删除前 i 项与当前解决方案中的一项相同的所有项目(然后重置当前解决方案)。