KMP算法
来源:互联网 发布:镜片种类知乎 编辑:程序博客网 时间:2024/05/17 16:03
/** 整体思路* 第一步,利用一个next数组,储存求出的模式串的回溯方案* 第二步,常规BF算法更改,将匹配失败之后的模式串指针利用next[j]求出* 第三步,常规运算*/#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>using namespace std;#define MAX 1005void GETNEXT(char a[],int next[])//计算模式串的next数组{ memset(next,0,sizeof(0));//数组清零 int j=0,k=-1; int zz; zz=strlen(a); next[0]=-1; while(zz--) { if(k==-1||a[k]==a[j]) { k++; j++; next[j]=k; } else { k=next[k]; } }}int KMP(char a[],char b[])//KMP算法{ int next[MAX],i=0,j=0; int m,n; m=strlen(a); n=strlen(b); GETNEXT(b,next);//调用函数,计算模式串b的next数组值 while(i<m&&j<n)//类似于常规的BF算法思路 { if(a[i]==b[j]||j==-1) { i++; j++; } else { j=next[j];//j进行回溯 } } if(j==n) { return (i-n+1);//返回模式串在主串中的位置 } else { return -1;//没有返回-1 }}int main(){ char a[100000+5],b[MAX]; while(scanf("%s%s",a,b)!=EOF) { cout<<KMP(a,b)<<endl; } 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算法
- 第四次实验 输出星号
- Java关闭线程的安全方法
- Genymotion的安装与使用(附百度云盘下载地址,全套都有,无需注册Genymotion即可使用)
- 几种排序总结(转载的)
- Longest Uncommon Subsequence I
- KMP算法
- Java线程池及用法
- android aidl进程间的通信
- B+,B*到R树
- 并发随笔(1)
- 线程组
- 查找---顺序查找
- VR系列——Oculus Rift入门手册:一、SDK入门
- 使用zabbix的java api来对主机进行删除时的bug说明