#include<stdio.h>
#include<string.h>
#define N 1005
int f[N], ans;
char P[N], T[N];
void getFail(int len){
int i, j;
j = f[0] = -1;
i = 0;
while(i < len)
{
while(j!=-1 && P[i]!=P[j])j = f[j];
i++, j++;
if(P[i] == P[j])f[i] = f[j];
else f[i] = j;
}
}
void KMP(int Tlen, int Plen){
int i, j;
i = 0, j = 0;
getFail(Plen);
while(i < Tlen){
while(j!=-1 && P[j] != T[i])j = f[j];
i++, j++;
if(j >= Plen)
{
ans++;
j = 0;
}
}
}
int main(){
while(scanf("%s", T), T[0] != '#'){
scanf("%s", P);
ans = 0;
KMP(strlen(T), strlen(P));
printf("%d\n",ans);
}
return 0;
}
HDU 2087 KMP裸题
最新推荐文章于 2020-05-06 00:06:21 发布