大佬们能不能解释下这个代码主要用来干嘛!!! #include<bits/stdc++.h> using namespace std; int len(char *s) { int i=0; while(s[i++]!='\0'){} return i-1; } void GenKMPNext(int next[],char *s) { int n=len(s); next[0]=-1; next[1]=0; int i; for(i=2;i<n;i++) { int k=0; int max=0; while(++k<i) { bool flag=true; for(int j=0;j<k;j++) { if(s[j]==s[i-k+j])continue; else { flag=false; break; } } if(flag) { max=k; } } next[i]=max; } for(int i=2;i<n;i++) { if(s[next[i]]==s[i])next[i]=next[next[i]]; } } int Find(char* s,char * p) { int n=len(p); int next[n]; GenKMPNext(next,p); int i,j; for(i=0, j=0;i<n && j<len(s);) { if(p[i]==s[j]){ i++,j++; } else if(next[i]>=0)i=next[i]; else { i=0;j++; } } if(i>=n) { return j-n; } else return -1; } int main() { char s[100]; cin>>s; char p[10]; cin>>p; cout<<Find(s,p)<<endl; // int next[100]; // GenKMPNext(next,s); // for(int i=0;iclen(s);i++) // { // cout<<next[i]<<endl; // } }