abcde a3 aaaaaa aa #
0 3
//15MS 352K
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
char text[1007],pattern[1007];
int next[1007],n,m;
void pre()
{
next[0]=-1;
int j=-1;
for(int i=1;i<m;i++)
{
while(j>=0&&pattern[j+1]!=pattern[i])j=next[j];
if(pattern[j+1]==pattern[i])j++;
next[i]=j;
}
}
int kmp()
{
int ans=0,j=-1;
for(int i=0;i<n;i++)
{
while(j>=0&&pattern[j+1]!=text[i])j=next[j];
if(pattern[j+1]==text[i])j++;
if(j==m-1){ans++;i+=(m-1);}
}
return ans;
}
int main()
{
while(cin>>text)
{
if(strcmp(text,"#")==0)break;
scanf("%s",pattern);
m=strlen(pattern);
n=strlen(text);
pre();
printf("%d\n",kmp());
}
return 0;
}
HDU 2087 剪花布条 KMP,布布扣,bubuko.com
原文:http://blog.csdn.net/crescent__moon/article/details/20950547