2012-04-21 81 views
3

我需要檢測一個字符串中的循環/序列並返回第一個匹配項。我應該怎麼做呢?如何找到一個循環/字符串重複?

實施例:

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

+5

不,它實際上是'1 2 5'。是否有一個最小的週期長度,或重複次數? 「循環」是否意味着重複發生必須是連續的? – 2012-04-21 07:27:51

+0

是的是1 2 5 ...我試過騎車的所有字符等。 – seesee 2012-04-21 07:31:44

+2

需要更多信息。這樣的序列是否有最小長度?它是否計數,如果序列的出現在字符串中不相鄰(所以,對於3 1 2 5 7 1 2 5 ...,計數1 2 5)?如果對最後一個問題的回答是肯定的,那麼在決定先發生什麼時,我們應該考慮序列的第一次出現還是序列的第二次出現? (因此對於1 2 3 4 5 6 4 5 6 1 2 3,是第一個重複序列1 2 3或4 5 6)?在你(或其他任何人)提出解決方案之前,你需要開始思考這些事情。 – 2012-04-21 07:33:05

回答

6

你學過Floyds cycle-finding algorithm?如果你想找到週期,這可能會對你有所幫助。很容易實現。

+0

謝謝,我沒有使用這個算法,但它似乎工作正常:D – seesee 2012-04-23 03:56:48

3

澄清基於所述意見:循環裝置的數字序列,其立即重複。所以

1 1 

將是一個週期

1 3 1 

不會因爲'1'的電勢循環所中斷由3

1 3 1 3 

是一個週期(1 3)。

所以一個基本的算法可能看起來像這樣。

  1. 迭代字符串。

  2. 每個數字發現它在String下一次出現。如果沒有發現任何東西繼續下一個字符。

  3. 如果發現下一次出現從當前位比較序列直到發生以下用相同長度的在下一occurence開始的順序。如果他們是一樣的,你會發現一個循環。如果不能繼續下一次發生。

相關問題