KMP模板
2014-08-06 18:59
274 查看
void getFail(char *p,int *f) { int m=strlen(p); f[0]=f[1]=0; int j=0; for(int i=1;i<m;++i){ while(j&&p[i]!=p[j]) j=f[j]; f[i+1]=p[i]==p[j] ? j+1 : 0; } } int KMP(char *t,char *p,int *f) { int n=strlen(t),m=strlen(p); getFail(p,f); int j=0; for(int i=0;i<n;++i){ while(j&&t[i]!=p[j]) j=f[j]; if(t[i]==p[j]) j++; if(j==m) return i-m+1; } return -1; }
void getFail(char *p,int *f) { int m=strlen(p); f[0]=-1; int j=-1,i=0; while(i<n){ if(j==-1||p[i]==p[j]){ f[++i]=++j; } else j=f[j]; } } int KMP(char *t,char *p,int *f) { int n=strlen(t),m=strlen(p); getFail(p,f); int i=0,j=0; while(i<n&&j<m){ if(j==-1||t[i]==p[j]){ i++; j++; } else j=f[j]; } if(j>=m) return i-m+1; return -1; }
相关文章推荐
- AC自动机以及KMP模板
- KMP模板
- HDU1711 模板题-KMP
- HDU 1686Oulipo (kmp模板题)
- KMP 算法模板
- 扩展KMP模板
- KMP模板
- KMP模板
- 【KMP模板】POJ 3461
- KMP 模板 hdu 2087
- HDU 1711 Number Sequence(KMP模板)
- HDU 1711 Number Sequence【KMP】【模板题】【水题】(返回匹配到的第一个字母的位置)
- Kmp 算法模板 C
- hdu 2203 kmp 模板题
- HDOJ - 1586 更新下KMP的模板...
- 模板:KMP模板
- HDU 1711 Number Sequence(KMP模板)
- KMP模板,最小循环节
- 字符串匹配 KMP(模板)
- Binary String Matching 5 (简单KMP模板题)