KMP模板
2014-07-21 10:21
302 查看
#include <stdio.h> void getnext(char *ch, int next[]); int kmp(char *ch1, char *ch2, int next[]); int main() { char ch1[100], ch2[100]; int next[100]; scanf("%s", ch1); getnext(ch1, next);//获得next数组。 scanf("%s", ch2); printf("%d\n", kmp(ch1, ch2, next)); return 0; } void getnext(char *ch, int next[])//对匹配串进行kmp匹配获得next数组值 { int i, j; i=0; j=-1; next[0] = -1;//初始化,next[0] = -1; while(ch[i]) { if(j==-1 || ch[i]==ch[j])//匹配成功时,当前ch[i]对应的next值 变为 匹配成功的ch[j]的下标值。 { i++; j++; next[i] = j; } else j = next[j];//匹配失败则向左移动匹配串,重新寻找,即从next[j]对应的ch[next[j]]开始。 } } int kmp(char *ch1, char *ch2, int next[]) { int i, j; i=0; j=0; while(ch2[i]) { if(j==-1 || ch2[i]==ch1[j])//与上方原理基本相同 { i++; j++; if(ch1[j]==0) return (i-j); } else j = next[j]; } return -1; }
相关文章推荐
- 洛谷 3375 KMP模板 KMP
- [KMP模板题]HDU-1711 Number Sequence
- HDU 1711 Number Sequence (KMP模板题)
- HDU - 1711 Number Sequence(KMP入门模板题)
- HDU2087 剪花布条 KMP模板
- KMP 算法模板
- 模板 KMP
- P3375 【模板】KMP字符串匹配(全程注释,简单易懂)
- HDU 1711 Number Sequence(KMP模板)
- hdu1711(kmp纯模板)
- KMP简单模板
- kmp模板
- HDU 1711 Number Sequence(KMP 模板)
- KMP模板题 poj 3461 Oulipo
- KMP小模板
- 【KMP模板】
- P3375 【模板】KMP字符串匹配
- hdoj1711(KMP模板题)Number Sequence
- 【KMP】【模板】
- KMP模板