kmp算法模版
kmp是在字符串s中匹配字符串t的一种高效算法,朴素的暴力是o(n*m) ,kmp复杂度是o(n+m)
/** 调用 ans=kmp(s,t),s为原串,返回t在s的位置(首位置为1),找不到着返回0。 */ char s[maxn],t[maxn]; int next[maxn]; void get_next(char* t) { next[1]=0; for(int i=1,j=0;i<strlen(t);){ if(j==0||t[i-1]==t[j-1]){ i++;j++; if(t[i-1]!=t[j-1]) next[i]=j; else next[i]=next[j]; } else j=next[j]; } } int kmp(char *s,char *t) ///s为原串 { get_next(t); int i,j; for(i=1,j=1;i<=strlen(s)&&j<=strlen(t);){ if(j==0||s[i-1]==t[j-1]){ i++;j++; } else j=next[j]; } if(j>strlen(t)) return i-strlen(t); return 0; }
时间: 2024-10-24 23:29:40