擴充套件kmp既是求模式串和主串的每乙個字尾的最長公共字首
即令s[i]表示主串中以第i個位置為起始的字尾,則b[i]表示s[i]和模式串的最長公共字首
顯然kmp是求s[i]=模式串長度的情況,所以,擴充套件kmp是對kmp的拓展
像求kmp的next陣列一樣,我們先求a[i],表示模式串的字尾和模式串的最長公共字首
然後再利用a[i]求出b[i]
說明一下a的求法,b同理
現在我們要求a[i],且a[1]---a[i-1]已經求出,設k,且1<=k<=i-1,並滿足k+a[k]最大
所以t[k]--t[k+a[k]-1]=t[0]--t[a[k]-1],推出t[i]--t[k+a[k]-1]=t[i-k]--t[a[k]-1]
令l=a[i-k],若l+i-1
並相應更新k
時間複雜度為線性o(m+n)
while(1+j
j = j + 1;
a[1]=j;
int k=1;
for(int i=2; i
&nbs程式設計客棧p;
}j = 0;
while(j
j = j + 1;
b[0] = j,k = 0;
for(int i=1; i
}&n程式設計客棧bsp;ps:普通的next是到這個結尾的,能和模式串匹配的長度,擴充套件kmp是以這個開頭的能匹配的最大長度
pss:然後我簡單比較了下kmp和擴充套件kmp
本文標題: 擴充套件kmp演算法(extend kmp)
本文位址:
擴充套件KMP演算法
擴充套件kmp 求出a i.lena 1 與b的最長公共字首長度,記為ex i 或者說,ex i 為滿足a i.i z 1 b 0.z 1 的最大的z值 擴充套件kmp可以用來解決很多字串問題,如求乙個字串的最長回文子串和最長重複子串。演算法 設next i 為滿足b i.i z 1 b 0.z 1...
擴充套件KMP演算法
摘自 問題定義 給定兩個字串s和t 長度分別為n和m 下標從0開始,定義extend i 等於s i s n 1 與t的最長相同字首的長度,求出所有的extend i 舉個例子,看下表 i0 1234 567s aaaa abbb taaa aacextend i 54 3210 00為什麼說這是k...
擴充套件KMP演算法
擴充套件kmp 擴充套件kmp可以用來解決很多字串問題,如求乙個字串的最長回文子串和最長重複子串。演算法 設next i 為滿足b i i z 1 b 0 z 1 的最大的z值 也就是b的自身匹配 設目前next 0 lenb 1 與ex 0 i 1 均已求出,要用它們來求ex i 的值。設p為目前...