题目描述

如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置。

为了减少骗分的情况,接下来还要输出子串的前缀数组next。

(如果你不知道这是什么意思也不要问,去百度搜[kmp算法]学习一下就知道了。)

输入输出格式

输入格式:

第一行为一个字符串,即为s1

第二行为一个字符串,即为s2

输出格式:

若干行,每行包含一个整数,表示s2在s1中出现的位置

接下来1行,包括length(s2)个整数,表示前缀数组next[i]的值

输入输出样例

输入样例#1:复制

ABABABC
ABA

输出样例#1:复制

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字符串匹配相关推荐

  1. KMP算法小总结 洛谷P3375 【模板】KMP字符串匹配

    提问:这里有一个长度为n的字符串str1和长度为m的字符串str2(n > = m),问在str1中str2出现了几次? 如果使用暴力求解,一个一个比较,在n和m都极大的情况下将花费非常多的不必 ...

  2. 落谷 P3375 【模板】KMP字符串匹配

    题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next. 输入格式: 第一行为一个字符串,即为s1 ...

  3. Oulipo-欧力波(KMP字符串匹配问题)

    Oulipo-欧力波 HDU - 1686 The French author Georges Perec (1936–1982) once wrote a book, La disparition, ...

  4. Simpsons’ Hidden Talents辛普森一家的隐藏天赋(next数组和kmp字符串匹配)

    辛普森一家的隐藏天赋 HDU - 2594 目录 辛普森一家的隐藏天赋 HDU - 2594 题意描述:当给定字符串s1和s2时,找到s1中最长的前缀,即s2的后缀.如果有,输出相同的字符串即字符串长 ...

  5. KMP算法详解P3375 【模板】KMP字符串匹配题解

    KMP算法详解: KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt(雾)提出的. 对于字符串匹配问题(such as 问你在abababb中有多少个 ...

  6. 【模板】KMP字符串匹配

    题目描述 给出两个字符串 s_1s1​ 和 s_2s2​,若 s_1s1​ 的区间 [l, r][l,r] 子串与 s_2s2​ 完全相同,则称 s_2s2​ 在 s_1s1​ 中出现了,其出现位置为 ...

  7. 数据结构 kmp字符串匹配_用动画解释 KMP 算法

    大家好,我是一个每天在互联网都被读者催更催到爆肝,爆肾小鹿童鞋. 说实话,一些数据结构和算法我这辈子都不可能用到实际当中,但个人一直觉得能把复杂的东西讲明白是一件很牛逼的事情. 毕竟想牛逼也是很难的, ...

  8. Luogu3375 【模板】KMP字符串匹配

    复习字符串ing KMP模板 #include <iostream> #include <cstdio> #include <cstring> #include & ...

  9. 洛谷 P3375 【模板】KMP字符串匹配

    我这段时间因为字符串太差而被关了起来了(昨晚打cf不会处理字符串现场找大佬模板瞎搞,差点就凉了),所以决定好好补一下字符串的知识QAQ,暂时先学习kmp算法吧~ 题目链接:https://www.lu ...

最新文章

  1. openmp官方源码_MNN推理过程源码分析笔记(一)主流程
  2. C#语法精髓之常用的操作符
  3. [GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复(上)
  4. element-ui select
  5. mysql执行存储过程提示out of_PHP执行MYSQL存储过程报错:Commands out of sync; you can't run...
  6. 【计算几何】FZU Problem 2270 Two Triangles
  7. 使用cacti监控CISCO交换机
  8. 利用.jou文件将建筑shp文件导入Gambit方法
  9. IDEA terminal 输入mvn命令,提示mvn不是内部命令
  10. 机器学习应用——导学part
  11. 保健操对颈椎病有辅助治疗。
  12. VMware虚拟机文件后缀详解
  13. 副本全攻略之哀号洞穴(超详细)
  14. Python虚拟环境安装与pyenv
  15. 硬件测试工程师的待遇和前景
  16. 【WebServerProgramming】Ch.1 网络因特网Web
  17. 一个菜鸡的ACM之路
  18. 企业权限管理系统---用户模块
  19. Idea控制台 CMD Tomcat乱码
  20. 微星主板在有RAID的情况下在NVME的SSD上安装Win10

热门文章

  1. php彩蛋是什么,php彩蛋
  2. 深度学习/神经网络PPt绘图工具
  3. 专家系统类毕业论文文献(推荐10篇)
  4. 淘宝商品详情接口(app、h5端)
  5. c#实现上位机数据采集的项目总结
  6. 蓝桥杯 基础训练 数字读法
  7. 云计算,大数据,人工智能相辅相成
  8. 《Origin 9.0科技绘图与数据分析超级学习手册》一第 1 章 Origin 9.0概述1.1 Origin简介...
  9. PMO和项目经理面对种种问题如何才能扭转?
  10. Qt视频监控系统一个诡异问题的解决思路(做梦都想不到)