kmp算法c语言代码加注释,KMP算法(Knuth-Morris-Pratt Algorithm)的C语言告终加注释.

其实这个算法凡是打听了原理就好了,万一不打听过程能够去这个链接看,里面写得很翔实。

http://hi.baidu.com/chioyang/blog/item/e8b58f384f51f2c3d56225fb.html

我个人感受,这个算法的过程,你能够当做被相称的字符串,例如t ,它有一个游标,符号为i, 它是相对模板

p来说是静止不动,模板p也有一个游标,我们假想为q, 万一相称的话,那么字符串p 与模板

p同时前进移一个字符,万一不相称的话,那么模板p相对 t挪动,

用p目前获得的最大后缀去再相称,这个过程万一会意了的话,那么下面算法的告终能够说是信手拈来。下面给我的代码,注释得不好,渴望能帮助你会意。

#include #include #include void kmp(char *p, char *t) // p是模板,t是必需相称的字符串{int m=strlen(p); int n=strlen(t);int i;int *next=new int[m];int q=0; //q是曾经相称的字符的个数next[0]=0; for( i=1; i 0 && p[q] != p[i] ) //万一目前字符(其实是自己与自己相称)与p[q]不符的话,那么q换成p[0 ~ q-1]这个索引的字符,即q=next[q-1]{q=next[q-1];}if( p[q] == p[i] ) //万一目前字符p[i]与p[q]相称,则把自己加进去,即q++,然后把此刻的长度值即自加后的q赋给next[i]{++q;}next[i]=q;} //下面的过程其实跟上面计算模板的next值差不多,凡是看懂了上面的,下面其实不难for (int k=0; k0 && p[q] != t[i] ){q=next[q-1];}if( p[q] == t[i] ){++q;}if( q == m ) //万一相称的字母数q等于char *p的长度值m的话,验证全面相称,打印位相消息与字符串,然后再继续q=next[q-1]{printf("find a match in the position %d/n",i-m+1);printf("%s/n",&t[i-m+1]);q=next[q-1];}}delete [] next;}int main(){char a[100]="you have a new message, the news is hello";char b[100]="new";kmp(b,a);return 0;}

String s = "Text here";

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值