1 void NXT() 2 { 3 int len=strlen(b); 4 nxt[0]=-1; 5 int j=0,k=-1; 6 while(j<len-1) 7 { 8 if(k==-1||b[j]==b[k]) 9 { 10 j++; 11 k++; 12 if(b[j]!=b[k]) nxt[j]=k; 13 else nxt[j]=nxt[k]; 14 } 15 else k=nxt[k]; 16 } 17 } 18 int KMP() 19 { 20 int i=0,j=0; 21 while(i<strlen(a)-1&&j<strlen(b)-1) 22 { 23 if(j==-1||a[i]==b[j]) 24 { 25 i++; 26 j++; 27 } 28 else j=nxt[j]; 29 } 30 if(j==strlen(b)) return i-j+1; 31 return -1; 32 }