Citerò il problema di ACM 2003:
Consider a string of length n (1 <= n <= 100000). Determine its minimum lexicographic rotation. For example, the rotations of the string “alabala” are:
alabala
labalaa
abalaal
balaala
alaalab
laalaba
aalabal
and the smallest among them is “aalabal”.
Per quanto riguarda la soluzione, so che ho bisogno di costruire un array di suffissi - e diciamo che può farlo in O (n). La mia domanda è ancora, come posso trovare la rotazione più piccola in O (n)? (n = lunghezza di una stringa)
Sono molto interessato a questo problema e ancora non riesco in qualche modo a trovare la soluzione. Sono più interessato al concetto e a come risolvere il problema e non alla concreta implementazione.
Nota: la rotazione minima significa nello stesso ordine di un dizionario inglese - "dwor" è prima di "word" perché d è prima di w.
EDIT: la costruzione dell'array suffisso richiede O (N)
ULTIMO EDIT: Penso di aver trovato una soluzione !!! Cosa succede se ho appena fuso due stringhe? Quindi se la stringa è "alabala" la nuova stringa mi farebbe "alabalaalabala" e ora mi piacerebbe solo costruire un suffisso array di questo (in O (2n) = O (n)) e ottenuto il primo suffisso? Immagino che potrebbe essere giusto. Cosa pensi? Grazie!