int b[MAXM]=zero;//根据需要改charint a[MAXN]=zero;int next[MAXM];void GetNext(int len)//得到b的next{ int i,j; for(i=1,j=0;i<=len;) { if(j==0||b[i-1]==b[j-1]) { next[i]=j; j++; i++; } else { j=next[j]; } }}int kmp(int lena,int lenb){ int i,j; for(i=0,j=0;i<lena;) { if(j==0||a[i]==b[j]) { if(a[i]!=b[j]) { j=0; i++; continue; } i++; j++; if(j==m) { return i-lenb+1;//返回起始匹配位置,从1开始 } } else { j=next[j]; } } return -1;}
转载于:https://www.cnblogs.com/Skyxj/p/3348867.html
相关资源:数据结构—成绩单生成器