Intereting Posts
Скомпилируйте загрузчик asm с внешним кодом c Что такое инструкция, которая дает нерасширяемый FP min и max на x86? Является ли объектная C 2.0 надлежащим надмножеством C? Как проверить, доступна ли библиотека перед компиляцией программы на C Как неинициализированная переменная получает случайное значение? Компиляция ошибки при использовании -std = gnu99 и встроенной функции Подчините процедуру подclassа, чтобы он мог использоваться как в окне, так и в диалоговом окне Debug Break на функциях Win32 Api «Сделать чистые» результаты «Нет правила, чтобы сделать цель чистой» Невозможно понять различные результаты экспериментов с размерами буфера в C и C ++. Также ifstream медленнее, чем FILE? Столбчатая очередь pcap struct pcap_pkthdr len vs caplen Отображение строки текстового файла без использования strstr () в C Включить заголовок в другой заголовочный файл как изменить заголовок пакета (заголовок IP, заголовок TCP) до того, как хост отправит их в сеть

Найдите самую длинную повторяющуюся строку и количество повторений в заданной строке

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

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

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

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

Государственная машина, вероятно, могла бы дать что-то лучше, чем big-O (N ^ 2).

EDIT: дерево суффикса, предложенное в другом ответе, является такой реализацией конечного автомата 🙂