洛谷P3375 【模板】KMP字符串匹配
来源:互联网 发布:淘宝账号申请 编辑:程序博客网 时间:2024/06/10 02:15
KMP字符串匹配
题目描述
如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置。
为了减少骗分的情况,接下来还要输出子串的前缀数组next。如果你不知道这是什么意思也不要问,去百度搜[kmp算法]学习一下就知道了。
输入输出格式
输入格式:
第一行为一个字符串,即为s1(仅包含大写字母)
第二行为一个字符串,即为s2(仅包含大写字母)
输出格式:
若干行,每行包含一个整数,表示s2在s1中出现的位置
接下来1行,包括length(s2)个整数,表示前缀数组next[i]的值。
分析:如题目,KMP模板。。。
代码
#include <cstdio>#include <cstring>#include <string>using namespace std;char s1[2000000],s2[200000];int p[2000000];int main(){ scanf("%s",s1); scanf("%s",s2); int n=strlen(s1); int m=strlen(s2); p[0]=-1; int j=-1; for (int i=1;i<m;i++) { while (j>-1&&s2[j+1]!=s2[i]) j=p[j]; if (s2[j+1]==s2[i]) j++; p[i]=j; } j=-1; for (int i=0;i<n;i++) { while (j>-1&&s2[j+1]!=s1[i]) j=p[j]; if (s2[j+1]==s1[i]) j++; if (j==m-1) { printf("%d\n",i-m+2); j=p[j]; } } for (int i=0;i<m;i++) printf("%d ",p[i]+1);}
阅读全文
1 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模板题)
- Ubuntu16.04安装后要做的一些事情
- 2、STM32基本接口驱动--IO 单总线 串口 SPI IIC
- 【HTML5入门】Jquery中获取控件值的三种方法
- Jquery.DataTable使用
- SDUT 1209 求实数绝对值
- 洛谷P3375 【模板】KMP字符串匹配
- grep
- 浏览器Web开发者工具 ------ 控制台内管理cookie,indexedDB,localStorage,sessionStorage
- stm32跑不到main函数
- long和long类型的区别
- Java线程的5种状态及状态之间转换
- java分页跟取模,分批次插入db
- 产品经理如何做好行业研究及竞争对手分析工作
- 如何使用SeaJS