如何在字符串中查找循环/重复?

时间:2012-04-21 07:24:47

标签: java

我需要检测字符串中的循环/序列并返回第一个匹配项。我应该怎么做呢?

示例:

2 0 5 3 1 5 3 1 5 3 1

要发生的第一个序列是5 3 1

没有规则。序列可以是字符串长度的一半,例如

5 3123 1231 231 31 231 41 452 3453 21 312312 5 3123 1231 231 31 231 41 452 3453 21 312312

序列为5 3123 1231 231 31 231 41 452 3453 21 312312

2 个答案:

答案 0 :(得分:6)

你研究过Floyds cycle-finding algorithm吗?如果你想找到周期,这可能会对你有所帮助。也很容易实现。

答案 1 :(得分:3)

基于注释的说明:周期表示一系列立即重复的数字。所以

1 1

将是一个循环

1 3 1

不会,因为1s的潜在循环被3次中断

1 3 1 3

是一个循环(1 3)。

因此基本算法可能如下所示。

  1. 迭代字符串。

  2. 对于每个数字,在字符串中找到它。如果找不到任何内容继续使用下一个字符。

  3. 如果发现下一次出现,则将当前数字到下一次出现的序列与从下一次出现时开始的相同长度的序列进行比较。如果它们是相同的,你会发现一个循环。如果没有继续下一次出现。