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”.
これはACMICPC2003の問題です。この問題は、他のユーザーからスタックフローですでに質問されています。[しかし、それは役に立たなかったので、接尾辞配列で実行したいと思います。]
サフィックス配列を使用してこの問題を解決するにはどうすればよいですか?
今まで私がしたことは??
(1)与えられた文字列がSであるとしましょう。
文字列Sをそれ自体と連結して、文字列S'を取得しました。
すなわち。S'= S+S。
(2)次に、O(nlog n)時間でS'の接尾辞配列を見つけました。
For example:
S=alabala
S'=alabalaalabala
Suffix No. Index Suffixes
0 13 a
1 6 aalabala
2 9 abala
3 2 abalaalabala
4 11 ala
5 4 alaalabala
6 7 alabala
7 0 alabalaalabala
8 10 bala
9 3 balaalabala
10 12 la
11 5 laalabala
12 8 labala
13 1 labalaalabala
そこで、接尾辞配列SAをよく計算しました。SA[]={13,6,9,2,11,4,7,0,10,3,12,5,8,1}。
また、サフィックスごとにLCPを計算しました[この問題で必要になるとは確信していませんが]。
次に進む方法SAを使用して目的の結果を得る方法は?
非常に*小さな例での説明は非常に効果的です。
ありがとう!!