4

我需要检测字符串中的循环/序列并返回第一次出现。我该怎么做呢?

例子 :

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

4

2 回答 2

7

你研究过弗洛伊德的寻环算法吗?如果您想找到周期,这可能会对您有所帮助。也很容易实现。

于 2012-04-21T11:50:56.333 回答
3

基于评论的澄清:循环是指立即重复的数字序列。所以

1 1

将是一个循环

1 3 1

不会因为 1s 的潜在循环被 3 打断

1 3 1 3

是一个循环 (1 3)。

所以一个基本的算法可能看起来像这样。

  1. 迭代字符串。

  2. 对于每个数字,在字符串中找到它的下一次出现。如果没有找到继续下一个字符。

  3. 如果找到下一个出现,则比较从当前数字到下一个出现的序列与从下一个出现开始的相同长度的序列。如果它们相同,则您找到了一个循环。如果没有继续下一次发生。

于 2012-04-21T11:01:04.153 回答