KMP算法
来源:互联网 发布:8097端口 编辑:程序博客网 时间:2024/06/08 20:04
#include<cstdio>#include<cstring>int next[100];char a[100];char b[100];void getnext(char *t,int n)//next数组表示前缀子串和后缀子串的最大重和的长度 { //例如:a b a b a int j=0,i=0; // -1 0 0 1 2 next[i]=-1;j=next[i]; //首个字母无前缀和后缀初始化为0或-1 while(i<n) //第四个字母的最大重合长度的子串为 :a { //第五个人为:a b if(j==-1||t[i]==t[j]) { i++;j++; next[i]=j; } else j=next[j]; } }int kmp(char *t1,int n1,char *t2,int n2){ int i=0,j=0; while(i<n1) { if(j==-1||t1[i]==t2[j]) { i++;j++;//一个字母匹配成功后,匹配下一个 if(j==n2)//子串的长度是不会变的当匹配得到长度达到n2是说明找到子串 { return i-n2+1;//找到子串 返回位置 break; } } else j=next[j]; //跳到 另一个重合子串处并重新匹配看是否符合条件 } //直到跳出循环或找到子串 return -1;}int main(){ scanf("%s%s",a,b);//a串为长串,b串为子串 int len1=strlen(a); int len2=strlen(b); getnext(b,len2);//获得next数组 //for(int i=0;i<len1;i++) //printf("%d ",next[i]); //printf("\n"); printf("%d",kmp(a,len1,b,len2));return 0; }
阅读全文
0 0
- KMP算法详解 【KMP】
- 【KMP】KMP算法模板
- KMP hihoCoder1015 KMP算法
- kmp算法
- KMP算法
- KMP算法
- KMP算法
- KMP算法
- KMP 算法
- kmp算法
- KMP算法
- kmp算法
- KMP算法
- KMP算法
- kmp算法
- kmp算法
- KMP算法
- KMP算法
- Linux虚拟机CentOS6.5: 安装telnet
- Kolakoski
- 如何将本地Xcode代码上传到GitHub上
- CSS vertical-align属性的用法
- html标准流中的浮动元素之空间零占用
- KMP算法
- HDOJ1300 Pearls 简单dp
- Just do it待解决
- 杭电 Kolakoski
- rtmpdump的librtmp时间戳有问题,服务器会断开连接
- NXP-EVB-P6UL linux根文件系统定制手册《一》
- JS中一种实现sleep函数的方案
- react-native插件
- 微信浏览器、手机版浏览器、pc版浏览器网站的缓存怎么清理? 比较好的三点解决方案