洛谷 P3375 【模板】KMP字符串匹配
来源:互联网 发布:淘宝的产品介绍怎么写 编辑:程序博客网 时间:2024/05/21 22:59
题目描述
如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置。
为了减少骗分的情况,接下来还要输出子串的前缀数组next。如果你不知道这是什么意思也不要问,去百度搜[kmp算法]学习一下就知道了。
输入输出格式
输入格式:第一行为一个字符串,即为s1(仅包含大写字母)
第二行为一个字符串,即为s2(仅包含大写字母)
输出格式:若干行,每行包含一个整数,表示s2在s1中出现的位置
接下来1行,包括length(s2)个整数,表示前缀数组next[i]的值。
输入输出样例
输入样例#1:
ABABABCABA
输出样例#1:
130 0 1
说明
时空限制:1000ms,128M
数据规模:
设s1长度为N,s2长度为M
对于30%的数据:N<=15,M<=5
对于70%的数据:N<=10000,M<=100
对于100%的数据:N<=1000000,M<=1000
#include<cstdio>#include<iostream>#include<cstring>using namespace std;int n,m,nextval[1000+100];char s[1000000+100],t[1000+100];void getNextval(){ int i=0,j=-1; nextval[0]=-1; while(i<m){ if(j==-1||t[i]==t[j]) nextval[++i]=++j; else j=nextval[j]; }}void KMP(){ int i=0,j=0; while(i<n){ if(j==-1||s[i]==t[j]) ++i,++j; else j=nextval[j]; if(j==m){ printf("%d\n",i-m+1); j=nextval[j]; } }}int main(){ scanf("%s%s",s,t); n=strlen(s),m=strlen(t); getNextval(); KMP(); for(int i=1;i<=m;i++) printf("%d ",nextval[i]); return 0;}
阅读全文
0 0
- kmp-洛谷P3375 【模板】KMP字符串匹配
- 洛谷 P3375 【模板】KMP字符串匹配
- 洛谷 P3375 【模板】KMP字符串匹配
- 洛谷P3375 【模板】KMP字符串匹配
- 洛谷P3375 【模板】KMP字符串匹配
- 洛谷P3375 【模板】KMP字符串匹配
- P3375 【模板】KMP字符串匹配
- P3375 【模板】KMP字符串匹配
- 洛谷P3375 KMP字符串匹配
- 洛谷 P3375 KMP字符串匹配
- kmp字符串匹配基础模板题 (洛谷P3375 )
- kmp板子 洛谷P3375
- 【字符串】KMP匹配模板
- 【模板】KMP字符串匹配
- [模板]-KMP字符串匹配
- 字符串匹配 KMP算法 模板
- [kmp] hdu1711 字符串匹配模板
- 字符串匹配(KMP模板题)
- mysql官方文档Clustered and Secondary Indexes翻译
- 【Codeforces 796 B. Find The Bone】
- @Repository、@Service、@Controller 和 @Component
- H5 21
- 服务端调用dubbo的方式
- 洛谷 P3375 【模板】KMP字符串匹配
- [C++笔试]运算符的重载
- HashMap和 Hashtable的比较
- weka之ZeroR
- 嵌入式linux+ARM 1
- 二维数组转一维数组:a[0][3]和a[1][0]为什么值相同?
- 关于《TensorFlow 实战Google深度学习框架》
- Linux下自定义TCP OPTIONS
- 计算机相关名词解释