我正在尝试找到一种方法来查找一组字符串中最大的重复子字符串。 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."
将是最长的重复字符串(即,在多个字符串中出现的最长字符串)。
答案 0 :(得分:0)
答案 1 :(得分:0)
您的问题的答案是从幻灯片60开始 Click here
基本上,我们列出了字符串输入的所有可能的后缀(线性时间)。对它们进行排序(NLogN),并通过排序列表(线性时间)找到最长的一个
答案 2 :(得分:0)
T(i)
字符串i
string
和值int
创建一个空哈希映射
M
T(i)
,P
中的每个节点P
(其中T(i)
是前缀字符串),
P
已在M
中,则增加M[P]
M[P] = 1
(P*,C*)
中找到M
对,以便:
C* >= 2
(*)length(P*)
在所有此类对中最大P*
是您想要的字符串(*)如果您希望获得字符串K
共有的最长子字符串,则应将2
替换为K