模板就是你的武器, 而真正的高手, 是不需要用任何武器的
a b a a b c a c
-1 0 0 1 1 2 0 1
void getNext(const char* str,int next[]){ int i=0,j=-1; next[i]=j; assert(str); while(i<(int)strlen(str)){ if(j==-1||str[i]==str[j]){ i++,j++; next[i]=j; } else j=next[j]; } }
int Index(const char* strPar,const char* str,int next[]){ int i=-1,j=-1; assert(strPar&&str); int m=strlen(strPar),n=strlen(str); while(i<m&&j<n){ if(j==-1||strPar[i]==str[j]) i++,j++; else j=next[j]; } if(j==strlen(str)) return i-j; else return -1; }