最短的重复子串[PYTHON]

时间:2016-08-29 02:03:53

标签: python string

是否有快速方法可以找到最短的重复子字符串以及发生的次数?如果有非你只需要返回实际的字符串(最后一种情况)。

>>> repeated('CTCTCTCTCTCTCTCTCTCTCTCT') 
('CT', 12)

>>> repeated('GATCGATCGATCGATC')          
('GATC', 4)

>>> repeated('GATCGATCGATCGATCG')         
('GATCGATCGATCGATCG', 1)

因为有些人认为它的家庭作业'我可以展示我的努力:

def repeated(sequentie):
    string = ''

    for i in sequentie:
        if i not in string:
            string += i

    items = sequentie.count(string)
    if items * len(string) == len(sequentie):
        return (string, items)
    else:
        return (sequentie, 1)

1 个答案:

答案 0 :(得分:1)

遗憾的是,您的方法不起作用,因为它假定重复的子字符串将具有唯一的字符。情况可能并非如此:

abaabaabaabaabaaba
但是,你有点走上正轨。我能想到的最简单的方法就是尝试反复检查是否有一些前缀确实构成了整个字符串:

def find_shorted_substring(s):
    for i in range(1, len(s) + 1):
        substring = s[:i]
        repeats = len(s) // len(substring)

        if substring * repeats == s:
            return (substring, repeats)

效率不高,但有效。有更好的方法。