擴充套件的KMP演算法,

2021-05-02 21:56:15 字數 470 閱讀 8137

擴充套件的kmp演算法,這個演算法作為kmp的擴充套件,可以說是包含kmp的。它求出了一組數值,extend[i]表示a串中以i開始的字尾(從i到lena的子串)與b串的最長公共字首(從頭數到不一樣的字元)的長度,也就是lcp。next[i]表示t[i..m]與t的最長公共字首長度,也就是自匹配的長度。設extend[0..k-1]已經算好,並且在以前的匹配過程中到達的最遠位置是p-1。最遠位置嚴格的說就是i+extend[i]-1的最大值,其中i=0,1,2,3,…,k-1;設取最大值的i是a。則有a[a~p-1] == b[0~p-a-1],可以推出有a[k~p-1] == b[k - a ~ p -1 - a] , 令l = next[k-a],若k+l= p)

next[k] = q, a = k;

}else }}

void extend_kmp()

extend[k] = q, a = k;

}else

}}同樣是線性的複雜度

擴充套件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為目前...