Проблема напрочуд нетривіальна. По-перше, два алгоритми грубої сили. Квадрат ("повторний візерунок") задається його довжиною ℓ і положення p, і потребує часу O(ℓ)перевірити. Якщо ми перейдемо над усімℓ і p, ми отримуємо O(n3)алгоритм. Ми можемо покращити це, спочатку перебравшисьℓ, а потім сканувати рядок двома запущеними покажчиками на відстані від ℓ. Таким чином можна перевірити, чи квадрат довжини2ℓ існує в лінійному часі, даючи загальний час роботи O(n2).
Колпаков і Кучеров розробили алгоритм пошуку всіх максимальних повторів у слові в часіO(n) [1], і їх алгоритм можна використовувати для знаходження всіх максимальних квадратів у часі O(n). Повтор подсловом видуwkx, де k≥2 і x є правильним префіксом w. Найбільший квадрат, що міститься в цьому повторі, - це(w⌊k/2⌋)2. Використовуючи цю формулу, даються всі максимальні повтори в слові (з яких є тількиO(n) багато), можна знайти найбільшу площу.
[1] Колпаков Р., Кучеров Г. (1999). Пошук максимальних повторів у слові за лінійним часом . In Foundations of Computer Science, 1999. 40-й щорічний симпозіум про (с. 596-604). IEEE.
142857
це не найдовше, тому що142857142857
довше. Я думаю, що вам слід відредагувати питання, щоб уточнити, що ви маєте на увазі під «повторним шаблоном».