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...