Link
解题思路
kmp模板题
找了超级多篇KMP的博客,一直都看不懂
直到……直到我找到了光(bushi)
这篇博客直接把我升华
Code
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
char a[1000100], b[1000100];
int p[1000100], ans, lena, lenb;
int main() {
scanf("%s%s", a + 1, b + 1);
lena = strlen(a + 1), lenb = strlen(b + 1);
p[1] = 0;
for(int i = 1, j = 0; i < lenb; i++) {
while(j > 0 && b[i + 1] != b[j + 1])
j = p[j];
if (b[i + 1] == b[j + 1])
j++;
p[i + 1] = j;
}
for(int i = 1, j = 1; i <= lena; i++) {
while(j > 0 && a[i + 1] != b[j + 1])
j = p[j];
if (a[i + 1] == b[j + 1])
j++;
if (j == lenb)
ans++;
}
printf("%d", ans);
}