KMP 模式串匹配演算法

2021-07-09 13:25:49 字數 586 閱讀 8314

這兩天讀了july的kmp,覺得很受益,寫下以作備忘。

kmp最重要的就是求出next陣列,而next陣列則是通過不斷比較 str2[k] 與 str2[j] 來確定下乙個字元對應的 next數值 ,(相等則直接next[++j] = ++k;,不相等則令k = next[k]    進行遞推直到出現 str2[k]==str2[j] 相等的情況,或是沒有相等的一直遞推到 k == -1 。

#include#include#includeint * getnext(const char *str2)

else

} return next;

}int kmp_sarch(const char *str1,const char *str2){

int i = 0,j = 0;

int len1 = strlen(str1);

int len2 = strlen(str2);

int * next;

next = getnext(str2);

while(i

串 KMP模式匹配演算法

樸素模式匹配演算法就是簡單的二重迴圈,第一重迴圈主串s從1到n,然後第二重迴圈子串t從1到m進行匹配判斷,時間複雜度為o n m 1 m kmp演算法的核心思想是 第一 如果子串前r個字元均不相等,且子串前r個字元與主串某連續的r個字元匹配,但子串第r 1就不匹配了,則主串的匹配下標可以直接向前跳r...

模式串匹配 KMP演算法

kmp是對字首暴力搜尋的改進,基於的想法其實是很樸素的。首先我們來看一下暴力搜尋。char bf char src,char pattern else if pattern temp 0 return src else return null 如果匹配失敗,則將關鍵字向右滑動乙個字元,從頭開始匹配關...

串的模式匹配 KMP演算法

一 kmp演算法的思想 由d.e.knuth j.h.morris和v.r.pratt共同提出了乙個改進演算法,消除了brute force演算法中串s指標的回溯,完成串的模式匹配。時間複雜度為o s.curlen t.curlen 這就是knuth morris pratt演算法,簡稱kmp 演算...