首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找一组字符串中重复最长的子字符串

查找一组字符串中重复最长的子字符串
EN

Stack Overflow用户
提问于 2013-03-07 05:44:39
回答 3查看 1.8K关注 0票数 2

我正在尝试寻找一种方法来找到一组字符串中最大的重复子字符串。longest duplicate substring problem通常适用于单个字符串,而不是一组字符串。在一组字符串中查找最大的重复子字符串时,哪种类型的算法是有用的?

在一组文件中查找最大的重复字符串(以便删除大型软件库中的重复代码)是我考虑的主要用例,但此算法还有许多其他用例。

例如,我希望在这组字符串中找到最长的重复子字符串:

代码语言:javascript
复制
"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."将是最长的重复字符串(即,出现在这些字符串中的最长字符串)。

EN

回答 3

Stack Overflow用户

发布于 2013-03-07 06:38:17

也许this就是您正在寻找的,但是您需要将该算法应用于两个以上的字符串。如果你仔细想想,这并不难。另外,请看一下this page。使用回溯不是一个好主意。

票数 0
EN

Stack Overflow用户

发布于 2013-05-27 08:52:05

您的问题的答案是从幻灯片60 Click here开始

基本上,我们列出了字符串输入的所有可能后缀(线性时间)。对它们进行排序(NLogN),并通过排序列表(线性时间)找到最长的一个

票数 0
EN

Stack Overflow用户

发布于 2013-05-27 10:11:41

  1. Create a Trie data structure (也称为前缀树)对于每个字符串,让我们将其称为string i

  • T(i)

  1. 创建一个包含键string和值int
    • 的空散列映射让我们称其为M

对于每个Trie

  • ,对于T(i)中的每个节点P (其中P是前缀字符串),如果<T(i)>d31>中已经存在关键字

  • ,则递增M[P]

  • else,insert M[P] = 1

在所有这样的pairs中,

  1. (P*,C*)中找到M对,使得:
    • C* >= 2 (*)
    • length(P*)是最大的

  1. P*是您希望

使用的字符串

(*)如果您想要获取字符串中K共有的最长的子字符串,您可以用K替换2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15258687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档