sa陣列,他儲存1....n 的某個排列,sa[2],……,sa[n],並且保證 suffix(sa[i]) < suffix(sa[i+1]),1≤i
也就是將 s 的 n 個字尾從小到大進行排序之後把排好序的字尾的開頭位置順次放入 sa 中。
rank陣列,他儲存的是每個位置的字尾子串的排名,與sa陣列是可以互逆的。
height陣列,儲存了字尾陣列中相鄰兩個字尾的最大公共字首,height[i] 的值是 sa[i-1]和sa[i]的公共字首長度。
所有子串,∑1
len
gth
len
gth−
(sa[
i]+h
eigh
t[i]
)
倍增演算法字尾陣列DA模板
problem jzoj1598 詢問乙個字串中有多少至少出現兩次的子串 content sa s code and explanation author anoyer include include include include using namespace std const int max...
演算法 字尾陣列
考完了noip,雖然d2腦子進水,然而還是目測水到了一等獎,避免了gg。也是時候開啟一些新的演算法了。思來想去,還是搞一下字尾陣列吧。先簡單說明字尾陣列,是啥。字串字尾知道吧。陣列知道吧。字尾陣列就是在將乙個字串的所有字尾按照常見的字典序排法,排一下。顯然我們可以用stdsort來進行非常暴力的排序...
演算法,字尾陣列
字尾陣列就是將字串所有字尾排序後的陣列,設字串為s,令字尾suffix i 表示s i.len s 用兩個陣列記錄所有字尾的排序結果 然後就是怎麼快速求所有字尾的順序了,其中的關鍵是如何減少兩個字尾比較的複雜度 方法是倍增法,定義乙個字串的k 字首為該字串的前k個字元組成的串,關於在k 字尾上的定義...