查找组成字符串的重复子字符串(如果存在)

A t*_*ang 1 python string pattern-matching python-3.x

您将如何在使用所有字符的同时将普通字符串拆分为尽可能多的相同部分。例如

a = "abab"
Run Code Online (Sandbox Code Playgroud)

会返回"ab",而与

b= "ababc"
Run Code Online (Sandbox Code Playgroud)

它会返回"ababc",因为它不能使用所有字母分成相同的部分。

Zer*_*eus 5

这与如何判断字符串在 Python 中是否重复?– 不同之处在于该问题仅询问确定字符串是否由相同的重复子字符串组成,而不是重复子字符串(如果有)是什么。

如果有一个重复字符串,则可以调整该问题的已接受(并且迄今为止表现最佳)的答案以返回重复字符串:

def repeater(s):
    i = (s+s)[1:-1].find(s)
    if i == -1:
        return s
    else:
        return s[:i+1]
Run Code Online (Sandbox Code Playgroud)

例子:

>>> repeater('abab')
'ab'
>>> repeater('ababc')
'ababc'
>>> repeater('xyz' * 1000000)
'xyz'
>>> repeater('xyz' * 50 + 'q')
'xyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzq'
Run Code Online (Sandbox Code Playgroud)