Code:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
const int maxn = 1000007;
int nxt[maxn];
//s1: 总串, s2: 模式串
char s1[maxn];
char s2[maxn];
int len1, len2;
int cnt = 0;
void get_next() {
nxt[0] = -1;
int i = 0,j = -1;
while (i < len2) {
if (j == -1 || s2[i] == s2[j])
nxt[++i] = ++j;
else
j = nxt[j];
}
}
void kmp() {
int i = 0, j = 0;
while (i < len1) {
if (j == -1 || s1[i] == s2[j]) {
i++;
j++;
} else {
j = nxt[j];
}
if (j == len2) {
cnt++;
//printf("%d ", i-len2+1);//输出位置
j = nxt[j-1];
i--;
}
}
}
int main()
{
scanf("%s %s", s1, s2);
len1 = strlen(s1);
len2 = strlen(s2);
get_next();
kmp();
printf("%d\n", cnt);
return 0;
}