luoguP3375 【模板】KMP字符串匹配
题目描述
如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置。
为了减少骗分的情况,接下来还要输出子串的前缀数组next。
(如果你不知道这是什么意思也不要问,去百度搜[kmp算法]学习一下就知道了。)
输入输出格式
输入格式:
第一行为一个字符串,即为s1
第二行为一个字符串,即为s2
输出格式:
若干行,每行包含一个整数,表示s2在s1中出现的位置
接下来1行,包括length(s2)个整数,表示前缀数组next[i]的值
输入输出样例
ABABABC ABA
1 3 0 0 1
说明
时空限制:1000ms,128M
数据规模:
设s1长度为N,s2长度为M
对于30%的数据:N<=15,M<=5
对于70%的数据:N<=10000,M<=100
对于100%的数据:N<=1000000,M<=1000000
样例说明:
所以两个匹配位置为1和3,输出1、3
这道题目是神秘的KMP算法构成的是一道大大的好题QAQ
所以下载让我好好分析一下;
事实上这题的效率是O(n+m)(m为模式串长度,n为匹配串长度)
首先用O(m)的时间来预处理,然后再用O(m)的时间来做最后的处理
其实kmp就是模式串先对自己的后缀进行匹配然后存储;
这样的话,做之后的kmp的匹配时,就只会对所有的字串进行一次匹配是不是不是很神奇;
接下来看代码
#include<bits/stdc++.h>
#define N 1000005
using namespace std;
int n,m,f[N];
char T[N],P[N];
int main(){scanf("%s%s",&T,&P);n=strlen(T);m=strlen(P);f[0]=f[1]=0;for(int i=1;i<m;i++){int j=f[i];while(j&&P[j]!=P[i])j=f[j];f[i+1]= P[j]==P[i] ? j+1 : 0; }f[m]=0;int j=0;for(int i=0;i<n;i++){while(j&&P[j]!=T[i])j=f[j];if(P[j]==T[i])j++;if(j==m)printf("%d\n",i-m+2);}for(int i=1;i<=m;i++)printf("%d ",f[i]);return 0;
}
luoguP3375 【模板】KMP字符串匹配相关推荐
- KMP算法小总结 洛谷P3375 【模板】KMP字符串匹配
提问:这里有一个长度为n的字符串str1和长度为m的字符串str2(n > = m),问在str1中str2出现了几次? 如果使用暴力求解,一个一个比较,在n和m都极大的情况下将花费非常多的不必 ...
- 落谷 P3375 【模板】KMP字符串匹配
题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next. 输入格式: 第一行为一个字符串,即为s1 ...
- Oulipo-欧力波(KMP字符串匹配问题)
Oulipo-欧力波 HDU - 1686 The French author Georges Perec (1936–1982) once wrote a book, La disparition, ...
- Simpsons’ Hidden Talents辛普森一家的隐藏天赋(next数组和kmp字符串匹配)
辛普森一家的隐藏天赋 HDU - 2594 目录 辛普森一家的隐藏天赋 HDU - 2594 题意描述:当给定字符串s1和s2时,找到s1中最长的前缀,即s2的后缀.如果有,输出相同的字符串即字符串长 ...
- KMP算法详解P3375 【模板】KMP字符串匹配题解
KMP算法详解: KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt(雾)提出的. 对于字符串匹配问题(such as 问你在abababb中有多少个 ...
- 【模板】KMP字符串匹配
题目描述 给出两个字符串 s_1s1 和 s_2s2,若 s_1s1 的区间 [l, r][l,r] 子串与 s_2s2 完全相同,则称 s_2s2 在 s_1s1 中出现了,其出现位置为 ...
- 数据结构 kmp字符串匹配_用动画解释 KMP 算法
大家好,我是一个每天在互联网都被读者催更催到爆肝,爆肾小鹿童鞋. 说实话,一些数据结构和算法我这辈子都不可能用到实际当中,但个人一直觉得能把复杂的东西讲明白是一件很牛逼的事情. 毕竟想牛逼也是很难的, ...
- Luogu3375 【模板】KMP字符串匹配
复习字符串ing KMP模板 #include <iostream> #include <cstdio> #include <cstring> #include & ...
- 洛谷 P3375 【模板】KMP字符串匹配
我这段时间因为字符串太差而被关了起来了(昨晚打cf不会处理字符串现场找大佬模板瞎搞,差点就凉了),所以决定好好补一下字符串的知识QAQ,暂时先学习kmp算法吧~ 题目链接:https://www.lu ...
最新文章
- openmp官方源码_MNN推理过程源码分析笔记(一)主流程
- C#语法精髓之常用的操作符
- [GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复(上)
- element-ui select
- mysql执行存储过程提示out of_PHP执行MYSQL存储过程报错:Commands out of sync; you can't run...
- 【计算几何】FZU Problem 2270 Two Triangles
- 使用cacti监控CISCO交换机
- 利用.jou文件将建筑shp文件导入Gambit方法
- IDEA terminal 输入mvn命令,提示mvn不是内部命令
- 机器学习应用——导学part
- 保健操对颈椎病有辅助治疗。
- VMware虚拟机文件后缀详解
- 副本全攻略之哀号洞穴(超详细)
- Python虚拟环境安装与pyenv
- 硬件测试工程师的待遇和前景
- 【WebServerProgramming】Ch.1 网络因特网Web
- 一个菜鸡的ACM之路
- 企业权限管理系统---用户模块
- Idea控制台 CMD Tomcat乱码
- 微星主板在有RAID的情况下在NVME的SSD上安装Win10