Я процитирую проблему от ACM 2003:
Рассмотрим строку длиной n (1 <= n <= 100000). Определите его минимальное лексикографическое вращение. Например, вращения строки «алабала»:
alabala
labalaa
abalaal
balaala
alaalab
laalaba
aalabal
и самый маленький среди них - «аалабал».
Что касается решения - я знаю, что мне нужно создать суффиксный массив - и скажем, я могу сделать это в O (n). Мой вопрос по-прежнему таков: как найти наименьшее вращение в O (n)? (n = длина строки)
Я очень заинтересован в этой проблеме, и все же я так или иначе не понимаю решение. Меня больше интересует концепция и способ решения проблемы, а не конкретная реализация.
Примечание: минимальный поворот означает в том же порядке, что и в словаре английского языка - «dwor» перед «словом», потому что d перед w.
РЕДАКТИРОВАТЬ: строительство массива суффиксов занимает O (N)
ПОСЛЕДНИЕ РЕДАКТИРОВАТЬ: я думаю, что нашел решение !!! Что если я просто объединю две строки? Так что если строка «alabala», то новая строка будет «alabalaalabala», и теперь я просто сконструировал бы массив суффиксов этого (в O (2n) = O (n)) и получил бы первый суффикс? Я думаю, это может быть правильно. Что вы думаете? Спасибо!