string - 如何找到字符串的周期

标签 string algorithm substring

我从用户那里获取一个输入,它是一个带有特定子字符串的字符串,该子字符串在整个字符串中重复出现。我需要输出子字符串或其长度 AKA period。

S1 = AAAA // substring is A
S2 = ABAB // Substring is AB
S3 = ABCAB // Substring is ABC
S4 = EFIEFI // Substring is EFI

我可以从单个字符开始,检查它是否与下一个字符相同,如果不相同,我可以先用两个字符,然后用三个,依此类推。这将是一个 O(N^2) 算法。我想知道是否有更优雅的解决方案。

最佳答案

您可以通过归纳计算字符串每个前缀的周期,在线性时间和常量附加空间内完成此操作。我不记得细节(有几件事需要做对),但你可以在 Section 13.6 of "Text algorithms" by Crochemore and Rytter under function Per(x) 中找到它们。 .

关于string - 如何找到字符串的周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21169045/

相关文章:

c# - 在 C# 的字符串中将 "\\"替换为 "\"

android - 有没有办法覆盖 res/values 中的 strings.xml?

c++ - 像素距离泛光填充

r 子串通配符搜索以查找文本

java - 我正在尝试制作一个简单的程序,用 'a' 符号替换 'e' 、 'i' 、 "*"但我收到此错误代码

javascript - 使用 Javascript 查找给定字符串中一系列出现的多个标点符号

算法分析

algorithm - 如何在线性计时器中对数组进行排序?

php - 查找字符串中重叠的所有子字符串

java - 如何从分隔字符串中获取值?