题目描述

如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置。
为了减少骗分的情况,接下来还要输出子串的前缀数组next。

输入格式:

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

输出格式:

若干行,每行包含一个整数,表示s2在s1中出现的位置
接下来1行,包括length(s2)个整数,表示前缀数组next[i]的值。

输入样例:

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

KMP字符串匹配

题解
1.先求出Next[] 数组
2.再用同样的方法求出F[]数组

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int Next[N], f[N];
char s1[N], s2[N];
int len1, len2;
void get()
{for(int i = 2, j = 0; i <= len2; i++){while(j && s2[i] != s2[j + 1])j = Next[j];if(s2[i] == s2[j + 1])j++;Next[i] = j;}
}
void kmp()
{for(int i = 1, j = 0; i <= len1; i++){while(j && (j == len2 || s1[i] != s2[j + 1]))j = Next[j];if(s1[i] == s2[j + 1])j++;if(j == len2){cout << i - j + 1 << endl;j = Next[j];}}
}
int main()
{cin >> s1 + 1 >> s2 + 1;len1 = strlen(s1 + 1);len2 = strlen(s2 + 1);get();kmp();for(int i = 1; i <= len2; i++){if(i == 1) cout << Next[i];else cout << ' ' << Next[i];}cout << endl;return 0;
}

落谷 P3375 【模板】KMP字符串匹配相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. P3375 【模板】KMP字符串匹配 (KMP模板)

    题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next. (如果你不知道这是什么意思也不要问,去百度 ...

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

    题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.如果你不知道这是什么意思也不要问,去百度搜[ ...

最新文章

  1. ML 徒手系列 最大似然估计
  2. phpstuday 修改网站访问目录
  3. ASP.NET2.0导航功能之配置会员和角色
  4. 字节跳动19春招研发第一次笔试-A卷第一题
  5. Android App 瘦身总结 第一章 图片资源的优化处理
  6. 云服务器下行_腾讯云轻量应用服务器简单测评
  7. 信息学奥赛一本通 1150:求正整数2和n之间的完全数
  8. IDEA编译通过能运行但是出现红色下划线
  9. 华为堡垒机_浪潮无线分析,华为云堡垒机
  10. win7下用docker部署的基于openvino的yolov5算法(二)openvino的docker镜像下载和安装
  11. plus/digg_ajax.php,织梦dedecms首页添加digg顶一下的修改方法
  12. 【VS2010学习笔记】【编程实例】 (在Visual Studio中使用C++创建和使用DLL)
  13. 中国城市群产业建设风险与投资发展决策建议报告2022版
  14. db,dbm,w,dbw,mw的换算关系
  15. 使用idea启动vue项目
  16. On the Sense of Humor [附译文]
  17. html select 选中触发,实现select中指定option选中触发事件
  18. 史上讲解最好的Docker教程,从入门到精通(建议收藏的教程)
  19. windows server 2008R2服务端上安装流媒体服务器
  20. input搜索框 php,html搜索框怎么设置?html搜索框input标签的使用方法实例

热门文章

  1. ios-团购代码的重构
  2. 关于开票本的几个操作细节
  3. Java BigDecimal 转换,除法陷阱(转)
  4. git rm 和 rm 的区别(转载)
  5. 2018年广西计算机一级,关于2018年上半年广西壮族自治区全国计算机等级考试报名工作的通知...
  6. linux日志auditd,linux 审计工具auditd日志audit.log时间戳转换查看
  7. 不使用额外空间交换2个数据的源代码
  8. 开源GIS软件初探(转载)
  9. oracle添加联合主键
  10. linux查看进程和终止进程