b[ ]为子串 ,a[ ] 为主串 ;
int get_next( char b[], int next[])
{
int i = 0 ;
int j=-1 ;
int len = strlen(b) ;
next[0]=-1 ;
while( i < len)
{
if( j==-1 || b[i]==b[j])
{
i++ ; j++ ;
next[i]=j;
}
else
j = next[j];
}
}
int kmp( char a[],char b[],int next[])
{
int i = 0;
int j = 0 ;
int len_a = strlen(a);
int len_b = strlen(b);
while( i<len_a && j<len_b)
{
if( j==-1 || a[i]==b[j])
{
i++;
j++;
}
else
j = next[j] ;
}
if( j >= len_b )
return i-len_b ;
else
return -1 ;
}