演算法模板 KMP演算法

2021-10-10 04:12:37 字數 942 閱讀 1012

kmp演算法:由d.e.knuth,j.h.morris和v.r.pratt提出的,串匹配演算法,一般串都是指字串。kmp是基於雙指標演算法的

應用:乙個字串在另外乙個字串**現的位置迴圈節

一般地,被匹配的字串叫主串,用來匹配主串的叫模式串

如果我們不用kmp,來查詢乙個字串在另外乙個字串中第一次出現的位置,暴力求解時間複雜度是o(nm),用kmp優化時間複雜度是o(m+n),但是空間複雜度是o(m)。m和n分別是模式串和字串的大小。

我覺得mooc浙江大學資料結構講的很不錯,附上鏈結第十二章最後一節kmp演算法.

對於刷題,還是思路清晰了,**簡潔為好,下面附上兩個模板。

附帶leetcode相關使用kmp演算法的題:28. 實現 strstr()

//ne陣列

int ne[m]

; ne[0]

=-1;

for(

int i =

1; i < m ; i++

)//兩個字串匹配

for(

int i =

0,j =-1

; i < n ; i ++)}

//匹配失敗

return-1

;

//ne陣列

ne[1]

=0;for

(int i =

2; i <= m ; i++

)//匹配

for(

int i =

1, j =

0; i <= n ; i++)}

//匹配失敗

return-1

;

演算法模板 KMP演算法

kmp演算法是一種改進的字串匹配演算法,由d.e.knuth,j.h.morris和v.r.pratt提出的,因此人們稱它為克努特 莫里斯 普拉特操作 簡稱kmp演算法 kmp演算法的核心是利用匹配失敗後的資訊,儘量減少模式串與主串的匹配次數以達到快速匹配的目的。具體實現就是通過乙個next 函式實...

KMP演算法(模板)

time limit 1000ms memory limit 65536k 有疑問?點這裡 給定兩個字串string1和string2,判斷string2是否為string1的子串。輸入包含多組資料,每組測試資料報含兩行,第一行代表string1 長度小於1000000 第二行代表string2 長...

KMP演算法模板

在文字t 1.n 中找到某個模式p 1.m 所有出現的位置被稱作字串匹配問題 m n p3375 模板 kmp字串匹配 這道題在洛谷上的評級居然是普及 普及?qvq 實現起來還是比較簡單的,只不過有很多細節可以有很多種寫法,看別人的 容易凌亂。理解起來比較困難的部分是如何get next 不建議初學...