1≤A,B 1 \leq A, B1≤A,B 的长度 ≤106 \leq 10 ^ 6≤106,A AA、
B B
B 仅包含大小写字母。
KMP模板题
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define maxn 1000005
using namespace std;
char text[maxn], patten[maxn];
int net[maxn];
int main() {
scanf("%s%s",text,patten);
int la = strlen(text);
int lb = strlen(patten);
memset(net, 0, sizeof(net));
for (int i = 1; i < lb; ++i) {
int j = i;
while (j > 0) {
j = net[j];
if (patten[j] == patten[i]) {
net[i + 1] = j + 1;
break;
}
}
}
int cnt = 0;
for (int i = 0, j = 0; i < la; ++i) {
if (j < lb&&patten[j] == text[i]) {
j++;
}
else {
while (j > 0) {
j = net[j];
if (text[i] == patten[j]) {
j++;
break;
}
}
}
if (j == lb) cnt++;
}
printf("%d\n", cnt);
return 0;
}