Saya akan mengutip masalah dari ACM 2003:
Pertimbangkan string dengan panjang n (1 <= n <= 100000). Tentukan rotasi leksikografis minimumnya. Misalnya, rotasi string "alabala" adalah:
alabala
labalaa
abalaal
balaala
alaalab
laaba
aalabal
dan yang terkecil di antara mereka adalah "aalabal".
Adapun solusinya - saya tahu saya perlu membangun array suffix - dan katakanlah saya bisa melakukannya di O (n). Pertanyaan saya masih, bagaimana saya bisa menemukan rotasi terkecil di O (n)? (n = panjang string)
Saya sangat tertarik dengan masalah ini dan saya masih belum mendapatkan solusinya. Saya lebih tertarik pada konsep dan bagaimana menyelesaikan masalah dan bukan pada implementasi konkret.
Catatan: rotasi minimum berarti dalam urutan yang sama seperti dalam kamus bahasa Inggris - "dwor" adalah sebelum "kata" karena d adalah sebelum w.
EDIT: konstruksi array suffix membutuhkan O (N)
EDIT TERAKHIR: Saya pikir saya menemukan solusinya !!! Bagaimana jika saya baru saja menggabungkan dua string? Jadi jika string adalah "alabala" string baru akan saya "alabalaalabala" dan sekarang saya hanya akan membangun array sufiks ini (di O (2n) = O (n)) dan mendapatkan sufiks pertama? Saya kira ini mungkin benar. Bagaimana menurut anda? Terima kasih!