HDU 2087剪花布条 KMP
KMP算法入门题 哥第一次写KMP惭愧啊,惭愧getnext写得蛋痛,后面的KMP部分更蛋痛。改了N久
#include<stdio.h>
#include<string.h>
#define Max 1005
char str[Max+5] = {0},ch[Max+5] = {0};
int next[Max+5],count = 0,n;
void getnext( )
{
int i = 0,j = -1;
next[0] = -1;
while( ch[i] )
{
if( j == -1 || ch[i] == ch[j] )
++i,++j,next[i] = j;
else
j = next[j];
}
n = i;
}
void KMP( )
{
int i = 0, j = 0;
while( str[i] )
{
if( j == -1 || str[i] == ch[j] )
++j,++i;
while( str[i] && ch[j] && str[i] == ch[j] )
++i,++j;
if( j == n )
++count,j = 0;
else
j = next[j];
}
}
int main( )
{
while( scanf( "%s",str ),str[0] != '#' )
{
scanf( "%s",ch );
n = count = 0;
getnext( );
KMP( );
printf( "%d\n",count );
}
return 0;
}
这是final版。。。改了好久啊。。。
本人还是新手 ,转载请注明来自Lvsi‘s home
浙公网安备 33010602011771号