KMP演算法的總結

2021-08-19 21:40:02 字數 913 閱讀 4969

(1).kmp的作用

用於字串匹配,用於查詢乙個字串是否是另乙個字串的子串,可以返回出現的次數以及出現的位置。

(2).kmp的模板

#include

#include

#include

using namespace std;

char s1[110];

char s2[110];

int next[110];

void getnext(int len2)

}int kmp(int len1, int len2)

else

if(j == len2)

}return ans;

}int main()

{scanf("%s%s", s1, s2);

int len1 =strlen(s1);

int len2 =strlen(s2);

printf("%d\n", kmp(len1, len2));

return 0;

(3).對於next陣列的理解

①:如果求乙個字串從頭開始的各個子串在其中的出現的次數(hdu - 3336 )

②:next陣列的最後乙個代表的是這個字串的迴圈體最大長度(poj 2406 、1961)

如果len %(len - next[len]) == 0 表示這個字串存在連續重複子串

③:如果找到子串一次後前邊的所有都要捨去,則需要這樣改變()

就是找到一次後讓他從頭比較,而不是從上次相同的地方比較

KMP演算法總結

kmp題目重在理解next陣列的含義 next陣列的作用 next j 記錄模式串中第 j 個字元的最長公共字首長度 重要,這是它的意義所在 第二種理解方式,當模式串與主串失配時,跳回的位置。next len 即字串 0 結束標誌的next值 單個字串匹配時與週期有關 hdu 1711 模板題 33...

KMP演算法總結

kmp演算法是用來實現模式匹配的,其時間複雜度是o m n 具體原理見 其中有用到next陣列來計算子串中公共項的位數,簡單來說,就是子串遇到不匹配時,就查next資料來決定前進幾位 移動位數 已匹配的字元數 對應的部分匹配值 1 要不要減一看next陣列第一位是不是為1,個人覺得加一後是有好處的,...

KMP演算法總結

現在假設有兩個字串a bbc abcdab abcdabde,b abcdabd。現在要在a中找b。比較暴力的方法是直接搜尋 void gosearch 上述 最核心就是while迴圈,舉兩個例子說明其作用 還是選取b串作為說明。假設現在要求next 6 那麼當前的j next 5 1 next陣列...