kmp演算法 簡單易懂

2021-10-02 07:07:54 字數 969 閱讀 8249

kmp字串

給定乙個模式串s,以及乙個模板串p,所有字串中只包含大小寫英文本母以及阿拉伯數字。

模板串p在模式串s中多次作為子串出現。

求出模板串p在模式串s中所有出現的位置的起始下標。

輸入格式

第一行輸入整數n,表示字串p的長度。

第二行輸入字串p。

第三行輸入整數m,表示字串s的長度。

第四行輸入字串s。

輸出格式

共一行,輸出所有出現位置的起始下標(下標從0開始計數),整數之間用空格隔開。

資料範圍

1 ≤ n ≤ 104

1 ≤ m ≤ 105

輸入樣例:

3

aba5

ababa

輸出樣例:

0 2

#include

using

namespace std;

const

int n =

10010

, m =

100010

;//定義兩個常量

intmain()

// for(int i = 1; i <= n; i++)

// printf("%d", next[i]); 檢測 next陣列是否正確

//匹配過程

for(

int i =

1, j =

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

return0;

}

注意:

KMP 簡單易懂

解決問題 str1中是否有某個子串等於str2,有則返回在str1中得到起始位置。舉例 abcabck 和 abcabct 此時返回 1 abcabcabct 和 abcabct 此時返回3 常規思路 用str2去比較str1從0開始的每一位,比較結束若有str2返回此時比較的起始位置,否則返回 1...

通俗講解KMP演算法,簡單易懂

相比較傳統的暴力匹配字串演算法,kmp演算法有了比較大的改進,但是它卻更難理解,尤其是next陣列的求解部分。本人也反覆學習了幾次,每次弄懂但幾個月就忘了,然後就找部落格重新學,下次忘了就能看自己的博文了,哈哈。模式串 abcabcabda 目標串 abcabd 暴力演算法中當目標串第六個字母d不匹...

演算法筆記 字串匹配KMP演算法,簡單易懂

kmp演算法看懂了就會感覺挺容易的,思路也很清晰。看不懂就會稀里糊塗。先說什麼是字串匹配 字串匹配。簡單來說,就是給你兩個字串,尋找其中乙個字串是否包含另乙個字串,如果包含,返回包含的起始位置。比如下面兩個字串 string s1 bacbababadababacacabc string s2 ab...