看这篇文章的前提是你已经了解过KMP模式匹配算法。针对KMP模式匹配算法中存在的无意义匹配进行优化。
代码参考《大话数据结构》第五章第七节143页。
/*改进KMP模式算法*/ /*求模式串T的next函数修正值并存入数组nextval*/ void get_nextval(char* T, int* nextval) { int i, j; i = 1; j = 0; nextval[1] = 0; while (i < T[0])/*此处T[0]表示串T的长度*/ { if (j == 0 || T[i] == T[j])/*T[i]表示后缀的单个字符*/ /*T[j]表示前缀的单个字符*/ { ++i; ++j; if (T[i] != T[j])/*判断,当前字符与前缀字符不同,*/ /*T[j]表示前缀的单个字符*/ nextval[i] = j; else nextval[i] = nextval[j];/*字符的nextval值赋给nextval在i位置的值*/ } else j = nextval[j];/*若字符不同,则j值回溯*/ } }