一尘不染

在单词中找到最短的重复周期?

algorithm

我将要编写一个函数,该函数将使我返回最短的一组字母,最终将创建给定的单词。

例如,单词 abkebabkebabkeb 由重复的 abkeb 单词创建。我想知道如何有效地分析输入单词,以使字符创建输入单词的时间最短。


阅读 247

收藏
2020-07-28

共1个答案

一尘不染

O(n)解决方案。假定必须覆盖整个字符串。关键的观察结果是我们生成了模式并对其进行了测试,但是如果我们发现不匹配的内容,则必须包含已经测试过的整个字符串,因此我们不必重新观察那些字符。

def pattern(inputv):
    pattern_end =0
    for j in range(pattern_end+1,len(inputv)):

        pattern_dex = j%(pattern_end+1)
        if(inputv[pattern_dex] != inputv[j]):

            pattern_end = j;
            continue

        if(j == len(inputv)-1):
            print pattern_end
            return inputv[0:pattern_end+1];
    return inputv;
2020-07-28