資料結構與演算法 KMP演算法模板

2021-09-26 16:34:30 字數 859 閱讀 2318

kmp演算法指的是字串模式匹配演算法,問題是:在主串t中找到第一次出現完整子串p時的起始位置。該演算法是三位大牛:d.e.knuth、j.h.morris和v.r.pratt同時發現的,以其名字首字母命名。

下面是kmp演算法的c++版本:

#include 

#include

#include

using namespace std;

//getnext

vector

getnext

(string str2)

;return next;

} vector

next

(str2.

length()

);next[0]

=-1; next[1]

=0; int i =2;

//當前來到的位置

int cn =0;

//比對的位置,要與i-1位置相比

while

(i < str2.

length()

)return next;

}int kmp

(string str1, string str2)

else

if(next[i2]==-

1)//i2跳到了str2[0]

i1++

;else

//如果不匹配,i2跳到下一尋找位置

i2 = next[i2];}

//返回起始位置

return i2 == str2.

length()

? i1 - i2 :-1

;}int main()

資料結構與演算法 KMP演算法

給兩個字串 s1 s2 求s2在s1中是否出現過,出現過的話,給出在s1中的第乙個索引。首先根據s2維護乙個字首字尾表,比如 abbac 1,0,0,0,1 然後在與s1進行比較,比如 miabbabbac 與 abbac 首先有兩個下標指標分別分i,j s1 i 與s2 j 進行比較,不一樣。判斷...

資料結構 KMP演算法

求串的模式值next n 定義 1 next 0 1 意義 任何串的第乙個字元的模式值規定為 1。2 next j 1 意義 模式串t中下標為j的字元,如果與首字元相同,且 j的前面的 1 k個字元與開頭的 1 k個字元不等 或者相等但t k t j 1 k 如 t abcabcad 則next 6...

資料結構 KMP演算法

在我的理解,kmp演算法最核心的同時最難理解的是這個next 函式。但是,next 的值是挺好求的,難在哪呢?這個函式難在邏輯。理解起來很費勁,但真的很好用,並且這個函式的結果很好求。例如求模式串t ababaaa 的next j 的函式值 是這樣的,當j 0,next 0 1,對於任何子串,第乙個...