int next[100]; void getnext() { string a//(查找的串) next[0]=-1; int j=0,k=-1; for(j=0;j<a.size();j++) { if(k==-1||a[j]==a[k]) { next[++j]=++k; } else { k=next[k]; } } }
得到所用的next数组
int kmp(string s)//s 被查找的串 { int j=0; for(int i=0;i<s.size();i++) { j=0; while(i<s.size()&&j!=-1&&j<a.size()) { if(a[i]==a[j]) j++; else j=next[j]; if(j==a.size()) return i-a.size(); } } }