2019 8 28字尾陣列入門

2021-09-26 14:48:20 字數 953 閱讀 4061

8月23的ccpc網賽出了神奇的字尾陣列。嚇死本寶寶了。

啃了五天板子,還是沒太看懂。

那麼先用起來,再慢慢體會吧。

給你兩個字串,要求輸出最長公共子串長度。

參見大佬的部落格

字串的任何乙個子串都是這個字串的某個字尾的字首。

求a和b的最長公共子串等價於求a的字尾和b的字尾的最長公共字首的最大值。

將ab串拼接起來,中間用乙個沒有出現過的字元隔開。

然後遍歷height陣列,通過sa[i-1]與sa[i]與插入的隔板字元相對關係判斷最長字首是否來自不同的串。

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int inf=

0x3f3f3f3f

;const

int maxn =

2e6+10;

struct suffixarray

// m為最大字元值加1。呼叫之前需設定好s和n

void

build_sa

(int m)

}void

build_height()

}void

debug()

puts(""

);}}

;suffixarray sa;

char ch[maxn]

;int

main()

// sa.debug();

cout<}return0;

}

字尾陣列入門

字尾陣列 suffix array 指某個字串的所有字尾按字典排序後得到的陣列。陣列中只儲存字尾開始的位置。簡稱sa。字尾 從某個字串的某個開始位置到其末尾的字串子串,包括原串和空字串。例子 的字尾,字典排序 預設從小到大 開始以長度為1的字尾字串為排序規則對其sa進行排序,並求出其排名rank 藍...

字尾陣列入門,字尾陣列模板整理

我自己懶得寫,就是想寫個部落格儲存下大佬的部落格位址 點這模板題 大佬的模板 include include include include include include include include include include include define inf 0x3f3f3f3f d...

字尾陣列入門 SPOJ694

求單個子串的不重複字串的個數 t 20,len 1000 這是一道經典的字尾陣列入門題。由於剛開始學,對字尾陣列的理解還很抽象,於是拿這道題先找找感覺。首先,每個子串都可以理解成是某個字尾的字首,這是聯想到字尾陣列演算法的重要一步。接著,對於每乙個sa i 字尾陣列,含義為第i小的字尾的起始位置是s...