學習筆記 KMP演算法

2021-10-18 16:41:15 字數 2235 閱讀 4496

kmp演算法是一種可以在 o(n+m) 的時間複雜度內實現兩個字串匹配的演算法。

acwing 831. kmp字串

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

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

輸入格式

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

第二行輸入字串p。

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

第四行輸入字串s。

輸出格式

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

(1≤n≤1e5,1≤m≤1e6)

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define ull unsigned long long

#define up_b upper_bound

#define low_b lower_bound

#define m_p make_pair

#define mem(a) memset(a,0,sizeof(a))

#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)

#define inf 0x3f3f3f3f

#define endl '\n'

#include

using

namespace std;

inline ll read()

while

('0'

<=ch&&ch<=

'9') x=x*

10+ch-

'0', ch=

getchar()

;return f*x;

}const

int maxn =

1e6+5;

int n,m,ne[maxn]

;char s[maxn]

,p[maxn]

;int

main()

// kmp匹配

for(

int i=

1,j=

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

return0;

}

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define ull unsigned long long

#define up_b upper_bound

#define low_b lower_bound

#define m_p make_pair

#define mem(a) memset(a,0,sizeof(a))

#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)

#define inf 0x3f3f3f3f

#define endl '\n'

#include

using

namespace std;

inline ll read()

while

('0'

<=ch&&ch<=

'9') x=x*

10+ch-

'0', ch=

getchar()

;return f*x;

}const

int maxn =

1e6+5;

int n,m,ne[maxn]

;string s,p;

intmain()

// kmp匹配

for(

int i=

0,j=-1

;ireturn0;

}

演算法 KMP演算法學習筆記

kmp演算法是一種改進的字串匹配演算法,由d.e.knuth,j.h.morris和v.r.pratt同時發現,因此人們稱它為knuth morris pratt操作 簡稱kmp演算法 kmp演算法的關鍵是利用匹配失敗後的資訊,儘量減少模式串p 長度為m 與主串t 長度為n 的匹配次數以達到快速匹配...

Kmp演算法學習筆記

kmp演算法我認為難點在next陣列的建立。看kmp前我仔細看了下傳統的匹配模式,為 首元素存放串的長度 int index sstring s,sstring t else i i j 2 if j t 0 return i t 0 else return 0 我認為想深刻理解好kmp演算法要和傳...

KMP演算法學習筆記

kmp是一種字串匹配演算法,網上有許多的講解和介紹,都非常清楚明白,這裡只說明一點next i 表示 1,i 1 位中的最長公共字首字尾,因此在遇到字元不匹配時,直接將字串右移j next j 位即可。不多說了,直接上習題 poj 3461 oulipo kmp演算法裸題,直接上模板 code in...