KMP算法

来源:互联网 发布:淘宝网红店排行榜 编辑:程序博客网 时间:2024/06/05 15:38
/*KMP算法中求next数组的算法和KMP算法*/void GetNext(SqString t,int next[])//由模式串t求出next值{int j,k;j=0;k=-1;next[0]=-1;while(j<t.len-1){if(k==-1||t.ch[j]==t.ch[k])//k为-1或比较的字符相等时{j++;k++;next[j]=k;}else{k=next[k];}}}int KMPIndex(SqString s,SqString t)//KMP算法{int next[MaxSize],i=0,j=0,v;GetNext(t,next);while(i<s.len && j<t.len){if(j==-1||s.ch[i]==t.ch[j]){i++;j++;//i,j各增1}else{j=next[j];//i不变,j后退}}if(j>=t.len){v=i-t.len;//匹配成功,返回模式串的首字符下标}else{v=-1;//不匹配,返回-1}return v;}