kmp字符串匹配算法模板
题目链接:https://www.luogu.com.cn/problem/P3375
ac代码:
1 #include<iostream>
2 #include<cstdio>
3 #include<algorithm>
4 #include<vector>
5 #include<map>
6 #include<queue>
7 #include<set>
8 #include<cmath>
9 #include<list>
10 #include<cstring>
11 #include<string>
12 #define ll long long
13 #define ull unsigned long long
14 #define inf 0x3f3f3f3f
15 #define inff 0x7fffffff
16 using namespace std;
17 const int N = 100000 + 10;
18 const int M = 1000000 + 10;
19 const ll mod = 1e9 + 7;
20
21 char s[M], p[N];
22 int next_kmp[N];
23
24 void kmp_pre(int m) {
25
26 int i, j;
27 i = 0;
28 j = next_kmp[0] = -1;
29 while (i < m) {
30 while (j != -1 && p[i] != p[j]) j = next_kmp[j];
31 next_kmp[++i] = ++j;
32 }
33
34 return;
35 }
36
37 int ans = 0;
38
39 void kmp(int n, int m) {
40
41 //int ans = 0;
42 int i, j;
43 i = 0, j = 0;
44 kmp_pre(m);
45 while (i < n) {
46 while (j != -1 && s[i] != p[j]) j = next_kmp[j];
47 i++, j++;
48 if (j >= m) {
49 cout << i - m + 1 << "\n";
50 ans++;
51 j = next_kmp[j];
52 }
53 }
54
55 return;
56 //return ans;
57 }
58
59
60 int main() {
61
62 //int lenp, lens;
63 cin >> s;
64 cin >> p;
65 int lens = strlen(s);
66 int lenp = strlen(p);
67 kmp(lens, lenp);
68 //putchar('\n');
69 //cout << ans << "\n";
70 //cout << kmp(lens, lenp) << "\n";
71 for (int i = 1; i <= lenp; i++) {
72 cout << next_kmp[i] << " ";
73 }
74
75 return 0;
76 }
永远热爱,永远向着光。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人