【发布时间】:2013-02-21 21:55:12
【问题描述】:
我正在尝试找到一种方法来找到一组字符串中最大的重复子字符串。 longest duplicate substring problem 通常适用于单个字符串,而不是一组字符串。什么类型的算法可用于在一组字符串中查找最大的重复子字符串?
在一组文件中查找最大的重复字符串(以删除大型软件库中的重复代码)是我想到的主要用例,但该算法也有许多其他用例。
例如,我想在这组字符串中找到最长的重复子字符串:
"Hello world, this is the first string."
"Hello to the world, this is the second string."
"Hello world. This is the third string."
"This is the third string."
在这种情况下,"This is the third string." 将是最长的重复字符串(即出现在多个这些字符串中的最长字符串)。
【问题讨论】:
-
一种可能的方法是为每个字符串生成一个分隔符,并将每个字符串连接成一个字符串,分隔符位于每个字符串之间。分隔符需要是在任何现有字符串中都找不到的字符串。然后我可以使用相同的算法来查找单个字符串的最长重复子字符串。
-
@Andy 为什么,你好!在 SMC 玩得开心,是吗? ;) 无论如何,我很确定如果你只是连接字符串然后应用原始算法,你可能会有更好的运气。
-
虽然,您可能希望首先标记您的输入,而不是逐个字符地查看。取决于你如何实现它,它可以大大加快整体实现速度。
-
后缀树/后缀数组。
-
其实
his is the是所有字符串中最长的子串,后面跟string.