Найдите самую длинную повторяющуюся строку и сколько раз она повторяется в данной строке - PullRequest
4 голосов
/ 31 января 2010

Например, для заданной строки " abc fghi bc kl abcd lkm abcdefg " функция должна вернуть строку " abcd " и счетчик 2.

Решение O (n ^ 2) кажется простым, но я ищу лучшее решение.

Отредактировано: Если нет ничего лучше, чем O (n ^ 2), то какой подход был бы наилучшим с точки зрения производительности.

Ответы [ 2 ]

9 голосов
/ 31 января 2010

Вы можете решить это за линейное время, построив дерево суффиксов и выбрав путь от корня до самого глубокого внутреннего узла; это даст вам самую длинную повторяемую строку. Если у вас есть эта строка, подсчитать, сколько раз она появляется, тривиально.

2 голосов
/ 31 января 2010

Конечный автомат может дать что-то лучше, чем big-O (N ^ 2).

РЕДАКТИРОВАТЬ: Дерево суффиксов, предложенное в другом ответе, является такой реализацией конечного автомата:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...