kmp

来源:互联网 发布:java简单计算器源代码 编辑:程序博客网 时间:2024/06/06 19:32

这只是最简单的MP算法还可以进行进一步的优化
KMP算法主要难点是对next数组的理解
void getnext(char *s,int *next)//更新next数组{  int len = strlen(s);next[0] = 0;next[1] = 0;int i,j;for(i = 0;i<len;i++){j = next[i];while(j!=0&&s[i]!=s[j])j = next[j];//顺着失陪边走,直到可以匹配next[i+1] = s[i] == s[j]?j+1:0;}}void find(char *T,char *p,int *next)//查找P是不是T的子串{int len = strlen(T),m = strlen(p);int j = 0,i;for(i = 0;i<len;i++){while(j&&p[j]!=T[i])j = next[j];if(p[j] == T[i])j++;if(j == m)printf("%d\n",i-m+1);//找到了返回下标,不是第几个}}


0 0
原创粉丝点击