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 不建議初學...