思路:
在查找时每当匹配成功,将 j=0
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1000010;
int nxt[maxn];
char a[maxn],b[maxn];
int alen,blen;
void getnext()
{
int i,j;
i = 0;
j = nxt[0] = -1;
while(i<blen)
{
if(j==-1 || b[j]==b[i])
{
i++,j++;
nxt[i] = j;
}
else
j = nxt[j];
}
}
int Search()
{
int i,j;
int cnt = 0;
i = j = 0;
while(i<alen)
{
if(j==-1 || b[j]==a[i])
i++,j++;
else
j = nxt[j];
if(j==blen)
{
cnt++;
j=0;
}
}
return cnt;
}
int main()
{
while(~scanf("%s",a) && a[0]!='#')
{
scanf("%s",b);
alen = strlen(a);
blen = strlen(b);
getnext();
printf("%d\n",Search());
}
return 0;
}