KMP算法

KMP算法

 

 1  int  kmpstrstr( const   char   * text,  const   char   * pattern) {   
 2       const   int  Pattern_Max  =   256 ;   
 3       static  unsigned  char  next[Pattern_Max];   
 4       int  i, j;   
 5       int  len  =  strlen(pattern);   
 6    
 7       if  (len  <=   0   ||  len  >  Pattern_Max) {  return   - 1 ; }   
 8      i  =   1 ;  j  =   0 ;  next[ 1 =   0 ;   
 9       while  (pattern[i]) {   
10           if  (pattern[i]  ==  pattern[j]) { next[ ++ i]  =   ++ j; }  else   
11           if  (j  ==   0 )                   { next[ ++ i]  =  j;   }  else   
12                                        { j  =  next[j];     }   
13      }   
14      i  =  j  =   0 ;   
15       while  (text[i]  &&  pattern[j]) {   
16           if  (text[i]  ==  pattern[j]) { i ++ ;  j ++ ;   }  else   
17           if  (j  ==   0 )                { i ++ ;         }  else   
18                                     { j  =  next[j]; }    
19      }   
20       return  (pattern[j]  ?   - 1  : (i - j));   
21  }

你可能感兴趣的:(KMP算法)