5
O(n)のサフィックス配列を使用した文字列の最小の辞書式回転
ACM 2003の問題を引用します。 長さn(1 <= n <= 100000)の文字列を考えます。その最小の辞書式回転を決定します。たとえば、文字列「alabala」のローテーションは次のとおりです。 アラバラ ラバラ アバラール バラアラ アラララブ ラアラバ あらばる その中で最小のものは「aalabal」です。 解決策として-私はサフィックス配列を構築する必要があることを知っています-そして、O(n)でそれを行うことができるとしましょう。私の質問はまだ、どうすればO(n)の最小回転を見つけることができますか?(n =文字列の長さ) 私はこの問題に非常に興味がありますが、それでも解決策が得られません。具体的な実装ではなく、概念と問題の解決方法に興味があります。 注:最小回転とは、英語の辞書と同じ順序であることを意味します。dはwの前にあるため、「dwor」は「word」の前にあります。 編集:サフィックス配列の構築にはO(N)が必要です 最終編集:解決策を見つけたと思います!!! 2つの文字列をマージした場合はどうなりますか?文字列が "alabala"の場合、新しい文字列は "alabalaalabala"になり、これのサフィックス配列(O(2n)= O(n)内)を作成して最初のサフィックスを取得しますか?これは正しいと思います。どう思いますか?ありがとうございました!