【发布时间】:2013-09-15 04:57:38
【问题描述】:
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 来解决。]
如何使用 Suffix Array 解决这个问题?
到现在为止我做了什么??
(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}。
我还计算了每个后缀的 LCPs b/w [虽然我不确定我是否会在这个问题中需要它]。
现在如何进一步进行。如何使用 SA 来获得想要的结果?
用一个非常*小的例子来解释会非常有效。
谢谢!!
【问题讨论】:
-
在这种情况下只需获取小于 S 大小的第一个数字 6。