解题思路:其实就是kmp匹配,但是有一点区别就是,匹配时j==l2-1时,不是j=next[j]而是j=-1从头开始
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int nxt[1005];
void build_nxt(char s[])
{
int i=1,j=-1,l=strlen(s);
while(i<l)
{
while(j!=-1&&s[j+1]!=s[i])
j=nxt[j];
if(s[j+1]==s[i]) j++;
nxt[i]=j;
i++;
}
}
int main()
{
//freopen("t.txt","r",stdin);
char s1[1005],s2[1005];
nxt[0]=-1;
while(scanf("%s",s1)!=EOF)
{
if(s1[0]=='#') break;
scanf("%s",s2);
build_nxt(s2);
int i=0,j=-1,l1=strlen(s1),l2=strlen(s2),ans=0;
while(i<l1)
{
while(j!=-1&&s2[j+1]!=s1[i])
j=nxt[j];
if(s2[j+1]==s1[i]) j++;
if(j==l2-1)
{
j=-1;
ans++;
}
i++;
}
printf("%d\n",ans);
}
return 0;
}