具体逻辑关系就是后缀分成 L L L型, S S S型,和 C ∗ C^* C∗型后缀。
s [ i : ] s[i:] s[i:]是 L ( l a r g e r ) L(larger) L(larger)型,表示后缀 s [ i : ] > s [ i + 1 : ] s[i:]>s[i+1:] s[i:]>s[i+1:]
s [ i : ] s[i:] s[i:]是 S ( s m a l l e r ) S(smaller) S(smaller)型,表示后缀 s [ i : ] < s [ i + 1 : ] s[i:]<s[i+1:] s[i:]<s[i+1:]
s [ i : ] s[i:] s[i:]是 C ∗ C^* C∗型,表示 s [ i : ] s[i:] s[i:]是 S S S,且 s [ i − 1 : ] s[i-1:] s[i−1:]是 L L L
可以 O ( n ) O(n) O(n)从后往前求出每个的类型。
然后我们对于 C ∗ C^* C∗型的所有后缀尝试排序。
尝试递归调用 s a i s sais sais的函数,那么我们要保证 O ( n ) O(n) O(n)的复杂度,
现在显然 C ∗ C^* C∗的后缀是最多 n 2 \frac n2 2n个的。
但是我们要递归调用,就需要把两个相邻 C ∗ C^* C</