#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
char substr[100002];
char str[100002];
int next[100002];
void getnext()
{
int len=strlen( substr );
int i=0, j=-1;
next[0]=-1;
while( i<len )
{
if( j==-1 || substr[i]==substr[j] )
{
i++;j++;
next[i]=j;
}
else
j=next[j];
}
}
int kmp()
{
int i=0, j=0, ans=0;
int sublen=strlen( substr );
int len=strlen( str );
while( i<len )
{
if( substr[j]==str[i] || j==-1 )
{
i++;j++;
}
else
j=next[j];
if( j==sublen )
{
ans++;
j=0;
}
}
return ans;
}
int main()
{
int i, j, k, t;
while( scanf( "%s",str ), str[0]!='#' )
{
scanf( "%s",substr );
getnext();
printf( "%d\n", kmp() );
}
return 0;
}
hdu 2087 剪花布条 KMP
最新推荐文章于 2022-04-20 23:46:23 发布