【字符串】【kmp模板】
s1为匹配串,s2为模式串。kmp算法中的next数组称为失配指针,表示s1[i]和s2[j]匹配失败时,最有效率的方法是让s1[i]和s2[j]中的哪个元素进行匹配。
next数组有很多种定义方式,自己选了1种作为模板。
void get_NEXT()//建立next数组 { int j,k; NEXT[0] = k = -1; j = 0; while(s2[j]!='\0') { if(k==-1||s2[k] == s2[j]) NEXT[++j] = ++k; else while(k!=-1) k = NEXT[k]; } return; } int kmp()//字符串匹配函数 { int i,j; i = j = 0; while(s1[i]!='\0') { if(j != -1&&s2[j]=='\0') j = NEXT[j]; else { while(j!=-1&&s2[j]!=s1[i]) j = NEXT[j]; j++; i++; } } return j; }