kmp
kmp 针对 C 风格字符串的next数组公式 上图中使用的自定的串结构, 下标从1开始的 , 下方代码是使用C风格字符串, 下标从0开始的, 公式修改如下: KMP 算法代码实现 含有调试代码。 # include <stdio.h> # include <string.h> # include <stdlib.h> # define NDEBUG /*需要调试信息输出请注释此宏*/ /*获取next数组*/ void get_next ( const char * t , int * next ) { int i , j ; i = 0 ; j = - 1 ; /*调整j为-1,代表主串从失配位置下一个位置 在 和模式串重头开始匹配*/ next [ 0 ] = - 1 ; int t_len = strlen ( t ) ; while ( i < t_len ) { if ( - 1 == j || t [ i ] == t [ j ] ) { ++ i ; ++ j ; next [ i ] = j ; } else { j = next [ j ] ; } } } /*匹配, 在main串中匹配pattern*/ int subString ( const char * s , const char * t ) { int i = 0 ; /