检测一系列字符的重复时间是否优于O(n!)

时间:2011-04-21 01:09:12

标签: java design-patterns

我需要找到一系列字符(它实际上是一个很长的数字)开始重复的时候。我认为模式最简单。谁能帮我?

3 个答案:

答案 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)左右。它本质上是一种经过修改的子序列搜索算法。