Я ищу алгоритм (возможно, реализованный в Python), способный найти наиболее повторяющуюся последовательность в строке. Что касается REPETITIVE, я имею в виду любую комбинацию символов, которая повторяется снова и снова без перерыва (тандемное повторение).
Алгоритм, который я ищу, отличается от алгоритма "найди самое распространенное слово". Фактически, повторяющийся блок не должен быть самым распространенным словом (подстрокой) в строке.
Например:
s = 'asdfewfUBAUBAUBAUBAUBAasdkBAjnfBAenBAcs'
> f(s)
'UBAUBAUBAUBAUBA' #the "most common word" algo would return 'BA'
К сожалению, я не знаю, как с этим справиться. Любая помощь очень приветствуется.
ОБНОВИТЬ
Небольшой дополнительный пример, чтобы уточнить, что я хочу, чтобы мне возвращали последовательность с наибольшим количеством повторений, независимо от того, какой у нее базовый строительный блок.
g = 'some noisy spacer'
s = g + 'AB'*5 + g + '_ABCDEF'*2 + g + 'AB'*3
> f(s)
'ABABABABAB' #the one with the most repetitions, not the max len
Примеры от @rici:
s = 'aaabcabc'
> f(s)
'abcabc'
s = 'ababcababc'
> f(s)
'ababcababc' #'abab' would also be a solution here
# since it is repeated 2 times in a row as 'ababcababc'.
# The proper algorithm would return both solutions.