- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我需要在字符串中找到最长的序列,并注意该序列必须重复三次或更多次。因此,例如,如果我的字符串是:
fdwaw4helloworldvcdv1c3xcv3xcz1sda21f2sd1ahelloworldgafgfa4564534321fadghelloworld
那么我希望返回值“helloworld”。
我知道有几种方法可以做到这一点,但我面临的问题是实际的字符串大得离谱,所以我真的在寻找一种可以及时完成的方法。
最佳答案
这个问题是 longest repeated substring problem 的变体。并且有一个 O(n) 时间算法来解决它,它使用 suffix trees .这个想法(正如维基百科所建议的)是构建一个后缀树(时间 O(n)),用后代的数量(时间 O(n) 使用 DFS)注释树中的所有节点,然后找到具有至少三个后代的树中最深的节点(使用 DFS 的时间 O(n))。这个整体算法需要时间 O(n)。
也就是说,众所周知,后缀树很难构建,因此在尝试此实现之前,您可能希望找到一个为您实现后缀树的 Python 库。快速谷歌搜索出现this library ,虽然我不确定这是否是一个好的实现。
另一种选择是使用 suffix arrays结合 LCP arrays .您可以遍历 LCP 数组中的相邻元素对,取每对元素中的最小值,然后以这种方式存储您找到的最大数字。这将对应于重复至少 3 次的最长字符串的长度,然后您可以从那里读取字符串本身。
有几种简单的算法可用于构建后缀数组(Manber-Myers 算法运行时间为 O(n log n),而且编写起来并不难),而 Kasai 的算法构建 LCP 数组的时间为 O(n)并且编码起来相当简单。
希望这会有所帮助!
关于python - 查找字符串中最长的重复序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11090289/
我正在尝试编写一个名为 map-longest 的 Clojure 实用函数(感谢备用名称建议)。该函数将具有以下“签名”: (map-longest fun missing-value-seq c1
为什么我创建了一个重复的线程 我在阅读后创建了这个线程 Longest increasing subsequence with K exceptions allowed .我意识到提出问题的人并没有真
我正在编写一个 Sub 来识别 1 到 1000 之间最长的 Collatzs 序列。由于我刚刚开始学习 VBA,我想知道如何添加过程来计算每个序列的长度。 Sub Collatz() Dim i
我正在编写一个 Sub 来识别 1 到 1000 之间最长的 Collatzs 序列。由于我刚刚开始学习 VBA,我想知道如何添加过程来计算每个序列的长度。 Sub Collatz() Dim i
我正在尝试减去 CSV 中的两列以创建第三列“持续时间”结束时间 - 开始时间 每一行也对应一个用户 ID。 我可以创建一个仅包含“持续时间”列的 csv 文件,但我宁愿将其重定向回原始 csv。 例
我在 2018.04 玩这个最长的 token 匹配,但我认为最长的 token 不匹配: say 'aaaaaaaaa' ~~ m/ | a+? | a+ /; # 「a」
因此,按照规范规定最终用户/应用程序提供的给定变量(200 字节)的字节长度。 使用 python 字符串,字符串的最大字符长度是多少,满足 200 字节,因此我可以指定我的数据库字段的 max_le
我需要针对我们的Jenkins构建集群生成每周报告。报告之一是显示具有最长构建时间的作业列表。 我能想到的解决方案是解析每个从属服务器(也是主服务器)上的“构建历史”页面,对于作业的每个构建,都解析该
我正在构建一个 iOS 应用程序,它将流式传输最长为 15 秒的视频。我阅读了有关 HLS 的好文章,因此我一直在对片段大小为 5 秒的视频进行转码。如果视频的第一部分加载时间太长,那么我们可以在接下
docs for Perl 6 longest alternation in regexes punt to Synopsis 5记录 longest token matching 的规则.如果不同的
我是一名优秀的程序员,十分优秀!