当前位置: 首页 > news >正文

东方博宜OJ 2391:子串位置 ← KMP算法

【题目来源】
https://oj.czos.cn/p/2391

【题目描述】
给定一个父字符串 s 和子字符串 p,请按照从前向后的顺序,请求出 p 在 s 中所有出现的起始位置。
例如:S=ABADABCEABABA,P=ABA,则求解的结果是:1 9 11。

【输入格式】
第 1 行读入一个仅包含大写字母的字符串 s;
第 2 行读入一个仅包含大写字母的字符串 p;
s 和 p 均是长度不超过 10^6 的字符串。

【输出格式】
输出 1 行,按题意输出 p 在 s 中出现的位置,数字之间用空格隔开。

【输入样例】
ABADABCEABABA
ABA

【输出样例】
1 9 11

【数据范围】
s 和 p 均是长度不超过 10^6 的字符串。

【算法分析】
● KMP算法详见:https://blog.csdn.net/hnjzsyjyj/article/details/146059543

●​​​​​​​ 在本文 KMP 函数的定义中,只需在 if(j==lent) 时,修改 j 的值,便可实现不重叠(j=0)及重叠(j=ne[j])计算模式串在主串中出现的次数。 
(1)题目“HDU 2087:剪花布条 → https://blog.csdn.net/hnjzsyjyj/article/details/127140892”,不重叠计算模式串在主串中出现的次数。(if(j==lent), j=0)
(2)题目“HDU 1686:Oulipo → https://blog.csdn.net/hnjzsyjyj/article/details/134238575”,重叠计算模式串在主串中出现的次数。(if(j==lent), j=ne[j])

【算法代码】

#include <bits/stdc++.h>
using namespace std;const int N=1e6+5;
int ne[N];void getNext(string t) {int len=t.length();int i=0,j=-1;ne[0]=-1;while(i<len) {if(j==-1 || t[i]==t[j]) {i++,j++;ne[i]=j;} else j=ne[j];}
}void KMP(string s,string t) {int lens=s.length(),lent=t.length();int i=0,j=0;while(i<lens && j<lent) {if(j==-1 || s[i]==t[j]) {i++,j++;} else j=ne[j];if(j==lent) {cout<<i-j+1<<" ";j=ne[j];}}
}int main() {string s,t;getline(cin,s);getline(cin,t);getNext(t);KMP(s,t);return 0;
}/*
in:
ABADABCEABABA
ABAout:
1 9 11
*/






【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/127140892
https://blog.csdn.net/hnjzsyjyj/article/details/146059543

 

http://www.jsqmd.com/news/651447/

相关文章:

  • 如何在3分钟内开始使用 YahooFinanceApi:免费获取全球金融数据的终极指南
  • JDBC操作事务
  • 3分钟快速上手:CardEditor卡牌批量生成器终极使用指南
  • LD3320语音识别芯片:从硬件架构到智能交互的全面解析
  • 计算机毕业设计:Python农业与气候数据可视化分析系统 Django框架 数据分析 可视化 爬虫 机器学习 大数据 深度学习(建议收藏)✅
  • 如何完整备份QQ空间:终极免费工具使用指南
  • Android开发者必看:VLC播放器options参数全解析(附实战代码)
  • DLSS Swapper:智能管理NVIDIA显卡DLSS文件的完整解决方案
  • 开源实践 | 基于深度盲超分的高光谱图像复原:从理论到代码实现
  • 避开VS2022的坑!Win10/11下用VS2019+CMake编译GTSAM 4.0.3 MATLAB工具箱全记录
  • 高采样率为何反而引入更多噪声?深入解析ADC采样中的噪声机制
  • 终极指南:TES5Edit零代码掌握上古卷轴5模组制作
  • 给 AI 装“技能”:Agent Skills 完全指南
  • 一键全选:OneMore插件如何让表格操作效率飙升300%
  • 如何用TwinCAT3制作加密库文件?保护你的PLC代码不被查看
  • YOLOV5训练中断恢复与轮数扩展的实战技巧
  • C/C++调试实战:如何用backtrace_symbols快速定位段错误(附完整代码)
  • 思科ISE紧急安全警报:两个CVSS 10.0级RCE漏洞可实现未授权远程完全接管
  • 4x4矩阵键盘的两种扫描方式对比:行列式vs线翻式(附STM32移植指南)
  • 国产优选:耐达讯自动化EtherCAT转RS232在工业协议转换中的卓越表现
  • Zemax公差分析实战:从‘过定位’到‘可制造性’,一个连续变焦红外镜头的优化避坑指南
  • 网络视听用户达 10.99 亿 微短剧成出海主力
  • Open WebUI架构解密:构建企业级AI助手的隐私优先解决方案
  • 基于Tecplot与MATLAB协同实现三维科学数据可视化的完整流程解析
  • 尝试使用302重定向加速国外服务器速度
  • Unity 自动化工具:一键提取并优化 Mixamo FBX 动画切片 (AnimationClip)
  • Latex写论文/报告必备:对比hyperref与pdfcomment,哪个才是生成PDF书签的最佳选择?
  • 别再乱调学习率了!用PyTorch的5种Scheduler画图对比,实战选型指南
  • 永磁同步电机鲁棒电流预测控制进阶:扩展状态观测器(ESO)的设计、离散化与参数整定实战解析
  • 从DIY树莓派到量产智能硬件:工程师如何根据项目选对芯片(CPU/MPU/MCU/SoC实战指南)