KMP模板
第23次理解了,一个讲的不错的博客:https://blog.csdn.net/starstar1992/article/details/54913261#commentBox
char str[MAXN],s[MAXN]; int next[MAXN]; void get_next(char *s) { int len=strlen(s),k=-1; next[0]=-1; for(int i=1;ii) { while(k>-1&&s[k+1]!=s[i])k=next[k]; if(s[k+1]==s[i])k++; next[i]=k; } } int kmp(char *str,char *s) { get_next(s); int k=-1,len_s=strlen(s),len_str=strlen(str); for(int i=0;i i) { while(k>-1&&s[k+1]!=str[i])k=next[k]; if(s[k+1]==str[i])k++; if(k==len_s-1)return i-len_s+1; } return -1; } int main() { //ios::sync_with_stdio(false); while(cin>>str>>s) cout< endl; return 0; }