这个时候p[i]!=p[j+1],数组不匹配时,执行j=next[j]语句,因为不匹配,这时候会让j进行后退,直到j后退到0。 kmp的代码如下 123456789101112131415161718//子串和长串下标从1开始bool kmp(char *s,int l1,char *p,int l2){ /*求next数组*/ for(int i=2,j=0;i<=l1;i++){ while(j&&p[i]!=p[j+1]) j=next[j]; if(p[i]==p[j+1]) j++; next[i]=j; } /*进行字符串配对*/ for(int i=0;i<l1;i++){ while(j<l2&&s[i]==p[j+1]) j++; if(j==l2){ cout<<"匹配成功"<<endl; return true; } j=next[j]; }}