Эффективный алгоритм и код для поиска цикла в строке в C ++? - PullRequest
2 голосов
/ 04 декабря 2010

Например, в "12345123451234512345", каков эффективный алгоритм поиска "12345"?

Кодирование на C ++.

Спасибо.

1 Ответ

3 голосов
/ 04 декабря 2010

Продолжая свой единственный пример:

12345123451234512345 возвращает 12345

Я думаю, что вы хотите найти самую длинную возможную иглу, которая повторяется для завершения стога сена, то есть 1212121212 => 12, 444 => 4 и т. Д.

Самое простое решение - выбрать первый символ и выполнить сравнение строк для сравнения совпадений.Если в какой-то момент у вас есть несоответствие, выберите первые два символа и выполните сравнение всей строки и т. Д., Пока размер вашего окна не станет больше половины строки.

Сложность должна быть O (n ^ 2)

Вы можете оптимизировать размер окна, который вы выбираете, основываясь на длине строки, т.е. размеры окна могут быть только делителями длины строки.

...