题目描述

如题,给出两个字符串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


code

#include<stdio.h>
#include<string.h>
const int MX=1000001;
char s1[MX],s2[MX];
int l1,l2,next[MX];void get_next()
{for(int i=2,j=0;i<=l2;++i) {while(j>0 && s2[i]!=s2[j+1]) j=next[j];if(s2[i]==s2[j+1]) j++;next[i]=j;}
}void Find()
{for(int i=1,j=0;i<=l1;++i) {while(j>0 && (j==l2 || s1[i]!=s2[j+1])) j=next[j];if(s1[i]==s2[j+1]) j++;if(j==l2) printf("%d\n",i-l2+1);}
}int main()
{scanf("%s%s",s1+1,s2+1);l1=strlen(s1+1),l2=strlen(s2+1);get_next();Find();for(int i=1;i<=l2;++i) printf("%d ",next[i]);return 0;
}
/*
ABABABC
ABA
*/

转载于:https://www.cnblogs.com/qseer/p/9746232.html

字符串匹配【模板】(luogu 3375)相关推荐

  1. KMP字符串匹配 洛古3375 kmp水题

    题目大意 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next 分析 好久没动到博客,因为中考. 但是中考结 ...

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

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

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

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

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

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

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

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

  6. 2021年度训练联盟热身训练赛第四场 H - Rock Paper Scissors(字符串匹配,FFT)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 2021年度训练联盟热身训练赛第四场 H - Rock Paper Scissors(字符串匹配,FF ...

  7. 字符串匹配のKMP【专题@AbandonZHANG】

    算法详解 很长时间内都没有能够很理解KMP算法的精髓,尤其是很多书上包括<算法导论>没有把next函数(亦或 π函数)讲解的很透彻. 今天去看了matrix67大牛博客中关于kmp部分的讲 ...

  8. Hash——字符串匹配(求s1在s2中出现的次数)

    题目描述: 这是一道模板题. 给定一个字符串 A 和一个字符串 B ,求 B 在 A  中的出现次数.A 和 B中的字符均为英语大写字母. 求A 在 B 中出现了几次.(可重叠) 样例输入: 3 BA ...

  9. FFT字符串匹配(解决通配符问题)

    FFT字符串匹配 定义字符串下标从000,开始,有文本串AAA长度为nnn,模式串BBB长度为mmm,我们可以考虑一个函数f(x,y)=A(x)−B(y)f(x, y) = A(x) - B(y)f( ...

  10. 字符串匹配のKMP【@Abandon】

    算法详解 很长时间内都没有能够很理解KMP算法的精髓,尤其是很多书上包括<算法导论>没有把next函数(亦或 π函数)讲解的很透彻. 今天去看了matrix67大牛博客中关于kmp部分的讲 ...

最新文章

  1. 微信小程序的省市区三级地址mysql_微信小程序 实现三级联动-省市区
  2. VC++软件工程师高端培训
  3. mapreduce框架详解
  4. asp.net treeView 节点 点击 变色
  5. numpy输出到屏幕时有逗号和没逗号的原因
  6. 工具类的方法怎么引用_Java实用工具类:File工具类方法学习,可创建目录及文件...
  7. html5调用系统声音1s响一次_20款奔驰GLC260提车改柏林之声音响,音乐诉请,为爱发声!...
  8. 精品素材 – 24款扁平风格 PSD 格式图标免费下载
  9. 数据结构与算法顺序表数组版
  10. linux下类似Bus Hound的工具
  11. 近百个常用js代码汇总
  12. 【全网世界区划最全整理输出之第五部分】全世界所有国家的行政区划整理,省市信息,已按照国家,省,市排好序,可直接复制使用,第五部分到结束行21088,总条数:21088
  13. 汇编语言---80386寄存器,GCC内联汇编语法
  14. 元器件中关于晶体二极管的小小知识 2021-09-07
  15. 使用路由器上网微信qq绝地求生腾讯系打开慢或打不开的问题
  16. uniapp云开发微信小程序 云函数配置
  17. VC中窗口在屏幕中央显示
  18. Error in value[[3L]](cond) : Package ‘rhdf5‘ version 2.36.0 cannot be unloaded:
  19. Matlab随机森林库
  20. 第1年的放射学侵蚀进展是早期RA进一步侵蚀性进展的新预测指标

热门文章

  1. 一个小白的转行Python的经历!
  2. 复旦大学邱锡鹏教授《神经网络与深度学习》最新版更新!
  3. 收藏 | 人脸识别最新进展
  4. C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)习题答案
  5. opencv_python使用cv2.imread()读取中文路径报错问题(转)
  6. 安装unzip_史上最详细的WordPress安装教程(六):安装WordPress
  7. 微信+php++证书,php - 微信的商户证书文件怎么用
  8. 重复类发展手法_正确的护肤手法(动态演示),喜欢就拿去收藏吧!
  9. 开源中国android代码是什么,开源中国 OsChina Android 客户端源码分析(1)启动界面 app_start...
  10. 给button加href