题意:
中文题。
题解:
KMP模板题,有点坑爹的就是HDU中的编译中next好像是个函数吧?不能编译,要将next数组变成Next数组。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int MAXN=1000+7;
char s[MAXN];
char p[MAXN];
int Next[MAXN];
void getNext()
{
Next[0]=-1;
int k=-1,plen=strlen(p),j=0;
while(j<plen)
{
if(k==-1||p[k]==p[j])
{
j++;
k++;
Next[j]=k;
}
else
k=Next[k];
}
}
void KMP()
{
getNext();
int j=0,k=0;
int slen=strlen(s);
int plen=strlen(p);
int ans=0;
while(j<slen&&k<plen)
{
if(k==-1||s[j]==p[k])
{
j++;
k++;
}
else
k=Next[k];
if(k==plen)
{
k=0;
ans++;
}
}
printf("%d\n",ans);
}
int main()
{
while(~scanf("%s",s))
{
if(s[0]=='#')
break;
scanf("%s",p);
KMP();
}
}