kmp(基本操作)
来源:互联网 发布:仓鼠用品淘宝 编辑:程序博客网 时间:2024/06/06 12:32
#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<vector>#include<stack>#include<queue>#include<map>#define RG register#define IL inline#define pi acos(-1.0)#define ll long long using namespace std; int gi() { char ch=getchar(); int x=0; while(ch<'0' || ch>'9') ch=getchar(); while(ch>='0' && ch<='9') {x=10*x+ch-'0';ch=getchar();} return x;} int n;char A[1000010],B[10010];int nxt[10010]; //编号为i的结点表示正在匹配第i号字符void getnxt() { memset(nxt,0,sizeof(nxt)); int lsB=strlen(B),tmp; for(int i=1; i<lsB; i++) { tmp=nxt[i-1]; while(tmp && B[tmp]!=B[i]) tmp=nxt[tmp-1]; if(B[tmp]==B[i]) nxt[i]=tmp+1; else nxt[i]=0; }} int kmp() { int j=0,lsA=strlen(A),lsB=strlen(B),Ans=0; for(int i=0; i<lsA; i++) { while(j>0 && A[i]!=B[j]) j=nxt[j-1]; if(A[i]==B[j]) j++; else j=0; if(j==lsB) Ans++,j=nxt[j-1]; } return Ans;} int main() { n=gi(); while(n--) { scanf("%s%s", B, A); getnxt(); printf("%d\n", kmp()); } return 0;}
阅读全文
0 0
- kmp(基本操作)
- 数据结构串的基本操作及KMP算法
- 串的操作(KMP算法实现)
- KMP基本模板理解
- 单链表(基本操作)
- kmp算法的基本总结
- 克努特-莫里斯-普拉特操作(简称KMP算法)
- 克努特-莫里斯-普拉特操作(KMP算法)
- KMP算法(克努特-莫里斯-普拉特操作)简介
- VS2010 操作Word(二)基本操作
- java操作redis集群(基本操作)
- ajax 基本操作(批量操作)
- linux 基本操作(安装软件的基本操作)
- Sql 基本操作(一)
- Sql 基本操作(二)
- Oracle基本操作(待续)
- 数据库(SQL基本操作)
- 单链表基本操作(二)
- codeforces 78C. Beaver Game
- css3动态前半部分
- 从AtCoder RC 077D: 11 中学习逆元的线性求法
- Where is the Marble? UVA
- Java关键字——final详谈
- kmp(基本操作)
- php echo 和 print的区别
- 教教你如何下载去掉水印的美拍视频
- session的使用方法及实例
- POJ3159---Candies(最短路:spfa+栈or队列)(邻接表)
- 06 在mysql使用full join
- Java 观察者模式
- Log4j的使用
- Lucky Permutation Triple CodeForces