Самая длинная подстрока, которая появляется n времена

Для строки длины L, я хочу найти самую длинную подстроку, которая появляется n (n <L) или больше раз в тыс строки.

Например, самой длинной подстрокой, которая происходит 2 или больше раза в "БАНАНЕ", является "ANA", однажды начинающий с индекса 1 и еще раз начинающий с индекса 3. Подстрокам позволяют наложиться.

В строке "FFFFFF" самая длинная строка, которая появляется 3 или больше раза, является "FFFF".

Алгоритм грубой силы для n=2 выбрал бы всех пар индексов в строке, затем работая вперед, пока символы не отличаются. Выполнение - вдоль части берет O (L), и количество пар является O (L^2) (дубликаты не позволяются, но я игнорирую, что), таким образом, сложность этого алгоритма для n=2 была бы O (L^3). Для больших значений n это растет экспоненциально.

Существует ли более эффективный алгоритм для этой проблемы?

12
задан xcoders 4 April 2010 в 19:31
поделиться

2 ответа

Суффикс-деревья решают подобные проблемы очень быстро, обычно за O (n) времени и пространства.

Посмотрите на вики-страницу:

Суффиксные деревья .

и прочтите материал (раздел Функциональные возможности) на этой странице, который ссылается на:

Самая длинная повторяющаяся подстрока .

13
ответ дан 2 December 2019 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: