KMP算法,用于实现字符串的匹配
朴素匹配方法的复杂度是O(N*M)
KMP算法复杂度达到了O(N+M)
从这表达式来说,复杂度明显地降低了

核心点

维护next数组 ,对于next数组中next[j] = k。有需要保证s1串在j-1位置以及之前的共(k长度)的子串 和 s1串在k-1以及之前的部分是相同的(长度取短的部分)。

(假设s1串,比s2串长(或者等于))

代码:

void getNext(int next[]) {int j = 0, k = -1, length = str.size();// 其中k表示的是前面的那个串,而j表示的是后面那个串,用同一个串的不同起始点的串进行比较 // 前面的那个串去匹配后面的那个串,通过这个方式来进行匹配(也是一个KMP) next[0] = -1;  // 表示如果开头不能匹配,就用这个前面那个-1来匹配,也就是后移动一位 while(j < length) {if (k == -1 || str[j] == str[k]){j ++; k ++;next[j] = k;} else {k = next[k];}}
}

之后再看hiho1015

和一般的KMP不同,这一题,要求对于匹配出来的串进行计数。
就是看究竟匹配了几次

对于原来的KMP的改的地方就是

if (k == str.size()) {ans += 1;k = next[k];
}

代码如下:

#include <iostream>
using namespace std;string str, ptr;
void getNext(int next[]) {int j = 0, k = -1, length = str.size();// 其中k表示的是前面的那个串,而j表示的是后面那个串,用同一个串的不同起始点的串进行比较 // 前面的那个串去匹配后面的那个串,通过这个方式来进行匹配(也是一个KMP) next[0] = -1;  // 表示如果开头不能匹配,就用这个前面那个-1来匹配,也就是后移动一位 while(j < length) {if (k == -1 || str[j] == str[k]){j ++; k ++;next[j] = k;} else {k = next[k];}}
}int KMP_Ans(int next[]) {int j = 0, k = 0, length = ptr.size(), ans = 0;while (j < length) {if (k == -1 || str[k] == ptr[j]) {j ++; k ++;if (k == str.size()) {ans += 1;k = next[k];}} else {k = next[k];}}return ans;
} int main(){int time;cin >> time;while (time--){cin >> str>> ptr;int *a = new int [str.size() + 1];// 将数组开稍微大点 getNext(a);cout << KMP_Ans(a)<< endl;delete[] a; }
}

要是想要刷题可以点这里

原题链接

如果觉得有帮助的话,可以扫码,赞赏鼓励一下!谢谢!

KMP算法--[hiho1015]相关推荐

  1. BF算法优化-------KMP算法

    百度百科:KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特-莫里斯-普拉特操作(简称KMP算法).KMP算法的核心是利用 ...

  2. 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)

    目录 一.BF算法(暴力算法) 二.KMP算法 三.KMP算法优化 一.BF算法(暴力算法) 一个一个往后匹配,匹配失败继续从母串下一个和头(子串的头)往后继续匹配. 虽然简单,但是需要较多的时间复杂 ...

  3. hiho 1015 KMP算法 CF 625 B. War of the Corporations

    #1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...

  4. HDU 1711 Number Sequence(KMP算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Number Sequence Time Limit: 10000/5000 MS (Java/ ...

  5. 算法(2)KMP算法

    1.0 问题描述 实现KMP算法查找字符串. 2.0 问题分析 "KMP算法"是对字符串查找"简单算法"的优化. 字符串查找"简单算法"是源 ...

  6. KMP算法求回溯数组的步骤

    KMP算法到底是什么原理就不说了,各种资料上讲的明明白白,下面我就如何用代码来实现做一下说明和记录. KMP的核心思想就是,主串不回溯,只模式串回溯.而模式串匹配到第几位时失配,要回溯多少,由模式串本 ...

  7. 【HDU】2087 剪花布条 (KMP算法的应用)

    可以参考:从头彻尾彻底理解KMP 可以用朴素的模式匹配算法,也可以使用KMP算法,KMP算法所用的时间较短 普通版 #include <iostream> #include <str ...

  8. 字符串的模式匹配 (朴素模式匹配算法 ,KMP算法)

    字符串的模式匹配 寻找字符串p在字符串t中首次出现的起始位置 字符串的顺序存储 typedef struct {char str[MAXSIZE];int length; }seqstring; 朴素 ...

  9. 【每日一算法】KMP算法,看不懂算我输!

    微信改版,加星标不迷路! 每日一算法-KMP算法详解 作者:poll的笔记 阅读目录 1 字符串匹配 2 KMP算法 1 字符串匹配 字符串匹配是计算机的基本任务之一. 字符串匹配是什么?举例来说,有 ...

最新文章

  1. FPGA的设计艺术(17)如何搭建一个简易的逻辑测试平台?
  2. python编程入门经典教程-2020年5个经典python编程入门视频教程推荐学习
  3. 算法与数据结构(python):树与二叉树
  4. APUE(7)---进程环境
  5. 201671010435-王潇-实验四附加实验-项目互评
  6. 物联网-移远M26模块MQTT开发(AT命令)
  7. 【C#编程基础学习笔记】6---变量的命名
  8. Triumph X发布著名摄影师Kim Joong-man首个NFT系列
  9. 小程序显示富文本内容(wxparse)
  10. 太厉害了!推荐几款 Redis 可视化工具
  11. Microbiome | 黄海所陈松林院士/华科宁康等-肠道菌群在龙利鱼(半滑舌鳎)抗弧菌病性状形成中的机制...
  12. SQL 筛选某一时间大于某一个值的数据及数量
  13. 杭州电子科技大学ACM-1094
  14. writing idiomatic python 读书笔记(5)
  15. vue 移动端音乐(3) amp;amp;gt;热门歌单推荐部分(webpack-dev-conf.js做后端接口代理+scroll插件)
  16. STK中心天体cb等相关文件说明
  17. kaggle 2018 data science bowl____一次失败的 kaggle 项目参与经历及反思总结
  18. 16世纪的旷世奇才:大学弃医丛数,仅用20年就独立发明了温度计、军事罗盘、天文望远镜,后半生双目失明还能写出惊人科学著作
  19. ios微信h5棋牌游戏自动播放音效填坑
  20. 华兴资本获高瓴资本与京东金融等多家机构认购

热门文章

  1. 解决WINCE6.0新建工程编译出错的问题
  2. painticon java_新人,关于java的 paintIcon()方法
  3. 算法分析的目的_掌握这些数学函数,你会在算法效率的分析时经常用到
  4. linux查看网络流量
  5. Android下拉刷新开源库对比(转)
  6. 实现一个可管理、增发、兑换、冻结等高级功能的代币
  7. 开源助推进NFV发展,红帽为运营商“定制”NFV落地方案
  8. 深挖BAT内部级别和薪资待遇
  9. CentOS系统搭建OpenERP
  10. SQL Server2005如何进行数据库定期备份(转)