const int N = 100000;
/*KMP 算法模板时间复杂度 : O(n+m) [其中 n,m 是两字符串的长度]说明:1. a是长串 s是短串 即 a.length >= s.length2.实现了“查找第一次匹配的位置” “匹配的次数” “记录所有匹配区间”三个功能3.三个功能的实现代码非常相似,第3个功能可以同时实现前2个的功能
*/
struct KMP
{int f[N + 7];void getfill (string s) //预处理{memset (f, 0, sizeof (f) ); //根据其前一个字母得到for (int i = 1; i < s.length(); i++){int j = f[i];while (j && s[i] != s[j])j = f[j];f[i + 1] = (s[i] == s[j]) ? j + 1 : 0;}}int finds (string a, string s) //找到第一次匹配的位置 a.length >= s.length{getfill (s);int j = 0;for (int i = 0; i < a.length(); i++){while (j && a[i] != s[j]) j = f[j];if (a[i] == s[j]) j++;if (j == s.length() ){return i - s.length() + 1; //返回小串在大串中第一次出现的位置}}return -1;//不匹配返回-1}int findtimes(string a,string s)//返回匹配次数{getfill(s);int j = 0;int times = 0;for (int i = 0;i < a.length();++i){while (j&&a[i] != s[j]) j = f[j];if (a[i] ==s[j]) j++;if (j == s.length()){times++;}}return times;//不匹配的times将是0}struct Interval{int l,r;}q[N];//记录所有匹配区间 [指在长串中的下标,下标从0开始]int t;//记录匹配次数void findinterval(string a,string s)//找到并记录所有的匹配区间{getfill(s);int j = 0;t = 0;for (int i = 0;i < a.length();++i){while (j&&a[i]!=s[j]) j = f[j];if (a[i] == s[j]) j++;if (j == s.length()){t++;q[t].l = i - s.length() + 1;q[t].r = i;}}}void Print()//第3种功能附带打印功能{cout<<"两串匹配了 "<< t <<"次,分别是 :"<<endl;for (int i = 1;i <= t;++i){cout<<"第"<<i<<"次 : ["<<q[i].l<<","<<q[i].r<<"]\n";}}
}kmp;

不会打系列-KMP封装好的模板相关推荐

  1. STM32开发笔记31: STM32F4系列LQFP64封装引脚的兼容性

    单片机型号:STM32F4系列 LQFP64封装是设计和焊接电路板时,一个比较方便的封装形式,在使用STM32F401RBT6发现了一个原先不太熟悉的引脚VCAP1,经仔细查证,此引脚设计时,需注意一 ...

  2. 基于 FPGA Vivado 的74系列IP封装(附源工程)

    今天给大侠带来基于 FPGA Vivado 的 74 系列IP封装,开发板使用的是Digilent basys 3,如有想要入手 basys 3 开发板的,可以联系牛总:18511371833.话不多 ...

  3. 重复造轮子系列——基于FastReport设计打印模板实现桌面端WPF套打和商超POS高度自适应小票打印...

    重复造轮子系列--基于FastReport设计打印模板实现桌面端WPF套打和商超POS高度自适应小票打印 一.引言 桌面端系统经常需要对接各种硬件设备,比如扫描器.读卡器.打印机等. 这里介绍下桌面端 ...

  4. Ripro主题X系列站长素材下载网站模板

    介绍: 花130元买的Ripro主题X系列站长素材下载网站模板,PHP版本要求:7.2及以上 主题设置:全功能后台设置,无需改代码 主题特色:无需替换RIPRO原主题包任何内容即可实现后台全功能开关修 ...

  5. ​ [RHEL7.1]重新封装系统(制作模板)

     [RHEL7.1]重新封装系统(制作模板) 标签:rhel7.1封装 rhel7.1模板制作 原文:http://leoshi.blog.51cto.com/152597/1658137 虚拟化环境 ...

  6. 帝国cms【官方教程系列教程一】 首页模板制作

    帝国cms首页模板是指网站首页的模板.(/index.html) 修改首页模板 1.登录后台,单击"模板"菜单,选择"首页模板"子菜单,进入修改首页模板界面: ...

  7. Django学习系列之五:Django 的模板的render替换render_to_string用法及templates模板查找路径顺序

    Django学习系列之五:Django 的模板的render替换render_to_string用法及templates模板查找路径顺序 1.Django 的模板的render替换render_to_ ...

  8. 【视频教程】帝国CMS制作网站系列教程17—帝国CMS模板的策划

    作为一个程序员,搭建一个自己的博客网站是件非常容易的事情,但是作为很多非程序员非计算机专业的学习者来讲,可能就需要花点时间进行学习,而如果你想通过自学来学习怎么制作一个属于自己的网站的话,那这套帝国C ...

  9. 欧姆龙PLC程序 欧姆龙CJ系列PLC程序公司级程序模板,配触摸屏程序,工艺功能都很齐全

    欧姆龙PLC程序 欧姆龙CJ系列PLC程序公司级程序模板,配触摸屏程序,工艺功能都很齐全,日制标准,按着客户需要编程,程序中基本没有SET,RSET指令,逻辑经过不同项目验证过,拿过来添加自己设备的工 ...

最新文章

  1. 机器学习(五)——缓解过拟合
  2. Qt 并行计算 Concurrent Run的翻译
  3. STM32M CUBE实现printf打印调试信息以及实现单字节接收
  4. Brocade NOS学习笔记(第一章——第三章)
  5. 腾讯视频云黄斌:打造toB的产品与运营体系
  6. C++(STL):10---vector空间分配
  7. QT:MainWindow初始化列表解释
  8. Tensorflow 2 循环神经网络 GRU 豆瓣IMDB影评数据集训练模型
  9. python在知名公司的应用
  10. python server酱_教你如何使用Python向手机发送通知(IFTTT)
  11. Linux crontab 命令详解
  12. 1、试卷名称2013年下半年系统集成项目管理工程师真题
  13. WPS2005 For Linux 序列号
  14. excel快速便捷批量填充
  15. 《财富》推荐的75本必读书 !!推荐看看!受益匪浅
  16. 图表可视化配色学习——自动提取图片主色调与配色方案(python、pillow、haishoku和seaborn),并生成十六进制颜色编码
  17. 一般椭圆方程表示的椭圆的绘制
  18. 一些IGBT驱动芯片对比
  19. 分享---蔡康永情商课201集全
  20. linux 内核源码下载网址

热门文章

  1. 电信增值彩信平台软件模块清单(sp专用)
  2. mysql的分区和索引详解_Mysql分区和索引记录
  3. AI算法工程师 | 04人工智能基础-高等数学知识强化(一)数学内容概述
  4. 现代家用计算机的配置,家用电脑配置推荐
  5. 国内旅游社区网站推荐
  6. 尖峰法聚类:2021 年高教社杯全国大学生数学建模竞赛 E题 中药材的鉴别 问题1
  7. hive中使用iceberg表格式时锁表总结
  8. 云计算(cloudcomputing)是基于互联网的相关服务的增加、使用和交付模式
  9. 地图学相关知识(三)
  10. 【HCIE】NO.45 Hub and Spoke配置案例