Masalahnya secara mengejutkan adalah non-sepele. Pertama, dua algoritma brute force. Kotak ("pola berulang") diberikan oleh panjangnya ℓ dan posisi hal , dan membutuhkan waktu O ( ℓ ) untuk memverifikasi. Jika kita membahas semua ℓ dan hal , kita mendapatkan algoritma O ( n3) . Kita dapat memperbaikinya dengan terlebih dahulu mengulangi ℓ , dan kemudian memindai string dengan dua pointer berjalan pada jarak ℓ . Dengan cara ini, seseorang dapat memverifikasi apakah kuadrat panjang 2 ℓ ada dalam waktu linier, memberikan total waktu berjalan O ( n2) .
Kolpakov dan Kucherov mengembangkan algoritma untuk menemukan semua pengulangan maksimal dalam kata dalam waktu O ( n ) [1], dan algoritma mereka dapat digunakan untuk menemukan semua kotak maksimal dalam waktu O (n ) . Sebuah ulangi adalah subword dari bentuk wkx , di mana k ≥ 2 dan x adalah awalan yang tepat w . Kuadrat terbesar yang terkandung dalam pengulangan itu adalah ( b⌊ k / 2 ⌋)2. Menggunakan rumus ini, mengingat semua pengulangan maksimal dalam sebuah kata (yang hanya ada O ( n ) banyak), orang dapat menemukan kuadrat terbesar.
[1] Kolpakov, R., & Kucherov, G. (1999). Menemukan pengulangan maksimal dalam sebuah kata dalam waktu linier . Dalam Yayasan Ilmu Komputer, 1999. Simposium Tahunan ke-40 tentang (hal. 596-604). IEEE.
142857
itu bukan yang terpanjang karena142857142857
lebih lama. Saya pikir Anda harus mengedit pertanyaan untuk memperjelas apa yang Anda maksud dengan “pola berulang.”