子串查找
题目
输入
输出
输入样例
zyzyzyz
zyz
输出样例
3
解题思路
K M P KMP KMP的模板题
程序如下
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n, m, p[10000001];
char s[10000001], t[10000001];
int main()
{
scanf("%s", s + 1);
n = strlen(s + 1);
scanf("%s", t + 1);
m = strlen(t + 1);
p[1] = 0;
for(int i = 1, j = 0; i < m; ++i)
{
while(j > 0 && t[j + 1] != t[i + 1]) j = p[j];
if(t[j + 1] == t[i + 1]) ++j;
p[i + 1] = j;
}
int ans = 0;
int j = 0;
for(int i = 1; i <= n; ++i)
{
while(j && t[j + 1] != s[i]) j = p[j];
if(s[i] == t[j + 1]) ++j;
if(j == m) ans++;
}
printf("%d", ans);
return 0;
}