落谷 P3375 【模板】KMP字符串匹配
题目描述
如题,给出两个字符串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字符串匹配相关推荐
- KMP算法小总结 洛谷P3375 【模板】KMP字符串匹配
提问:这里有一个长度为n的字符串str1和长度为m的字符串str2(n > = m),问在str1中str2出现了几次? 如果使用暴力求解,一个一个比较,在n和m都极大的情况下将花费非常多的不必 ...
- 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 算法
大家好,我是一个每天在互联网都被读者催更催到爆肝,爆肾小鹿童鞋. 说实话,一些数据结构和算法我这辈子都不可能用到实际当中,但个人一直觉得能把复杂的东西讲明白是一件很牛逼的事情. 毕竟想牛逼也是很难的, ...
- 洛谷 P3375 【模板】KMP字符串匹配
我这段时间因为字符串太差而被关了起来了(昨晚打cf不会处理字符串现场找大佬模板瞎搞,差点就凉了),所以决定好好补一下字符串的知识QAQ,暂时先学习kmp算法吧~ 题目链接:https://www.lu ...
- P3375 【模板】KMP字符串匹配 (KMP模板)
题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next. (如果你不知道这是什么意思也不要问,去百度 ...
- P3375 【模板】KMP字符串匹配
题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.如果你不知道这是什么意思也不要问,去百度搜[ ...
最新文章
- ML 徒手系列 最大似然估计
- phpstuday 修改网站访问目录
- ASP.NET2.0导航功能之配置会员和角色
- 字节跳动19春招研发第一次笔试-A卷第一题
- Android App 瘦身总结 第一章 图片资源的优化处理
- 云服务器下行_腾讯云轻量应用服务器简单测评
- 信息学奥赛一本通 1150:求正整数2和n之间的完全数
- IDEA编译通过能运行但是出现红色下划线
- 华为堡垒机_浪潮无线分析,华为云堡垒机
- win7下用docker部署的基于openvino的yolov5算法(二)openvino的docker镜像下载和安装
- plus/digg_ajax.php,织梦dedecms首页添加digg顶一下的修改方法
- 【VS2010学习笔记】【编程实例】 (在Visual Studio中使用C++创建和使用DLL)
- 中国城市群产业建设风险与投资发展决策建议报告2022版
- db,dbm,w,dbw,mw的换算关系
- 使用idea启动vue项目
- On the Sense of Humor [附译文]
- html select 选中触发,实现select中指定option选中触发事件
- 史上讲解最好的Docker教程,从入门到精通(建议收藏的教程)
- windows server 2008R2服务端上安装流媒体服务器
- input搜索框 php,html搜索框怎么设置?html搜索框input标签的使用方法实例