kmp模板

/* 算法导论上的代码字符串是从1开始的,而这个是从0开始的比较符合编程习惯 另一个区别是这里的前缀函数pi[i]表示的是p[0..i]与p[m-i..m]匹配,与算法 导论上表示的长度不同。不过这只是细节上的大同小异。 */ char str[size+10]; int pi[size+10]; void calpi(char p[],int len) { pi[0]=-1; int k=-1; for (int i=1;i =0 && p[k+1]!=p[i]) k=pi[k]; if (p[k+1]==p[i]) ++k; pi[i]=k; } } void kmp(char T[],int n,char p[],int m) //n,m为主串和子串的长度 { calpi(p,m); int k=-1; for (int i=0;i =0 && p[k+1]!=T[i]) k=pi[k]; if (p[k+1]==T[i]) ++k; if (k==m-1) { printf("Pattern occurs with at %d",i-m+1); k=pi[k]; } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值