KMP模板
来源:互联网 发布:淘宝举报刷销量 编辑:程序博客网 时间:2024/06/16 07:12
#include <iostream>#include<string.h>#include<stdio.h>using namespace std;//p串在s串中出现的次数char s[1000001]; char p[10005];int next[10005];//next[i] 0-i字符串最大匹配数/** next[]的含义:x[i-next[i]...i-1]=x[0...next[i]-1]* next[i]为满足x[i-z...i-1]=x[0...z-1]的最大z值(就是x的自身匹配)next[i]=z;*/void getnext(char x[]){ int i,j,m; next[0]=0; next[1]=0; m=strlen(x); for(i=1;i<m;i++) { j=next[i]; while(x[i]!=x[j]) { if(j==0)break; j=next[j]; } if(x[i]==x[j]) next[i+1]=j+1; else next[i+1]=0; }}int KMP(char x[],char y[]){//x是模式串,y是主串 int i,j; int ans=0; int m=strlen(x); int n=strlen(y); getnext(x); j=0; for(i=0;i<n;i++) { while(x[j]!=y[i])//如果发现失配了,j=next[j]的意思是找到j-1结尾的最长前缀等于最长后缀的下一个字符与y[i]比较,看相等与否 { if(j==0)break; j=next[j]; } if(x[j]==y[i])j++; if(j==m) { ans++; j=next[j]; } }return ans;}int main(){ int n; while(scanf("%d",&n)!=EOF) { while(n--) { scanf("%s%s",p,s); // getnext(p);// for(int i=0;i<=strlen(p);i++)// {// cout<<next[i]<<" ";// } printf("%d\n",KMP(p,s)); } } return 0;}/*5HAHAHAHA3WQNWQN1ADAADADADA3BABABBBABABABABABABABABB1DADADDAADAADDAAADAAD0*/
0 0
- KMP模板
- KMP 模板
- kmp模板
- kmp模板
- kmp模板
- KMP模板
- kmp模板
- kmp模板
- KMP 模板
- 【模板】KMP
- KMP模板
- KMP模板
- 【KMP 模板】
- KMP模板
- KMP 模板
- kmp模板
- KMP模板
- KMP 模板
- Java基础总结
- 【学习笔记】《STL使用入门教程》第四讲:容器set、函数对象functor与对组pair
- Http请求响应码查询
- 示儿
- javascript 面向对象总结
- KMP模板
- 学习笔记 - 苹果账号
- 手势的识别
- Java IO 与NIO的区别
- phpstudy搭建nginx+php服务器显示php网页
- 关于EJB讲解,通俗了解EJB
- leetcode Ugly Number II
- Linux 系统应用编程——多线程经典问题(生产者-消费者)
- Objective-c下变量和属性的区别