当前位置: 首页 > 知识库问答 >
问题:

查找长度为N[关闭]的重复子字符串

高海阳
2023-03-14

我必须制作一个Java程序,在给定字符串中找到长度为n的所有重复子字符串。输入是字符串是非常长的,一个暴力的方法需要太多的时间。

我已经尝试了:
现在,我将分别查找每个子字符串,并使用KMP alogrithm检查该子字符串的重复。这也太花时间了。

解决这个问题的更有效的方法是什么?

共有1个答案

南宫松
2023-03-14

1)应该考虑使用后缀树数据结构。

后缀树

这个数据结构可以在O(N*logn)时间内构建
(我认为使用Ukkonen的算法甚至可以在O(N)时间内构建)
其中N是输入字符串的大小/长度。
然后它允许在O(M)时间内解决许多(否则)困难的
任务,其中M是模式的大小/长度。

所以即使我没有试过你的问题,我很肯定
如果你使用后缀树和你的问题的一个聪明的公式,那么
问题可以通过使用后缀树来解决(在合理的O时间内)。

2)关于这些(及相关)主题的一本很好的书是这本:

关于字符串、树和序列的算法

除非你在算法方面受过良好的训练,否则读起来并不容易。
但好吧,读这样的东西是获得良好训练的唯一方法;)

3)我建议你也看看这个算法。

Aho-Corasick算法

虽然,我不确定但是...这一个可能有点
离题与您的特定问题。

 类似资料:
  • 我必须制作一个Java程序,在给定的字符串中找到长度为n的所有重复子字符串。输入是字符串非常长,暴力方法需要花费太多时间。 我一直在尝试: 目前我正在分别查找每个子字符串,并使用KMP alogrithm检查该子字符串的重复。这也花了太多时间。 解决这个问题的更有效方法是什么?

  • 我需要找到字符串中最长的序列,并警告序列必须重复三次或更多次。例如,如果我的字符串是: fdwaw4helloworld vcdv1c3xcv3xcz1sda21f2sd1ahelloworld gafgfa4564534321fadghelloworld 然后我希望返回值“helloworld”。 我知道有几种方法可以做到这一点,但我面临的问题是,实际的字符串太大了,所以我真的在寻找一种能够及时

  • http://articles.leetcode.com/2011/11/lengton-palindromic-substring-part-i.html 我处理这个问题的领域是用java编写代码,使用简单的强力解决方案,然后使用o(n2)方法,没有额外的空间,就像现在这样。http://www.geeksforgeeks.org/lengte-palindromic-substring-set

  • 本文向大家介绍Python查找最长不包含重复字符的子字符串算法示例,包括了Python查找最长不包含重复字符的子字符串算法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python查找最长不包含重复字符的子字符串算法。分享给大家供大家参考,具体如下: 题目描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。例如在“arabcacfr”中,最长的不包含重

  • 我有一个这样的字符串: 我正在尝试获取任何显示为title(title=“anything here”)的内容。我已经尝试过了,但无法正常工作。

  • 如何获取从特定位置/具有特定偏移量开始的字符串中子字符串的索引,例如: PHP 中类似偏移