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”.
这是 ACM ICPC 2003 的问题。其他用户已经在堆栈流中询问过这个问题。[但这没有用,我想通过后缀 Array 来解决。]
如何使用后缀数组来解决这个问题?
直到现在我做了什么?
(1) 假设给定的字符串是 S。
我将字符串 S 与自身连接起来得到一个字符串 S'。
IE。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}。
我还计算了每个后缀的 LCPs b/w [虽然我不相信我会在这个问题中需要它]。
现在如何进一步进行。如何使用 SA 来获得所需的结果?
用一个非常*小的例子来解释会非常有效。
谢谢!!