我需要找到一系列字符(它实际上是一个很长的数字)开始重复的时候。我认为模式最简单。谁能帮我?
答案 0 :(得分:2)
如果是数字,请从最后开始。
查找最后一个n
和倒数第二个n
数字相同的序列,该数字在最大位数上重复。 O(n)
重复序列停止(从结束开始)重复开始的地方。
e.g。说你有1.2340111101111
您可以看到1
重复,但仅限4位数。 01111
重复10位数表示重复在1.234
答案 1 :(得分:1)
取决于此序列的来源,this might be useful。
答案 2 :(得分:1)
我不懂Java。我不确定你的确切问题,但似乎你正试图找到一个序列的最大轨道。以下伪代码应该有所帮助:
Given sequence M of length N
Initialize list of indices K
foreach index i from N-1 to N/2
seqLength := N-i
isOrbit? := true
foreach index s from 0 to seqLength-1
if M[N-1-s] != M[N-1-seqLength-s] then
isOrbit? := false
if isOrbit? then
append(K, i)
最长的轨道当然是添加到K的最后一个条目。算法是O(n ^ 2/4)左右。它本质上是一种经过修改的子序列搜索算法。