• 提问:这里有一个长度为n的字符串str1和长度为m的字符串str2(n > = m),问在str1中str2出现了几次?

  • 如果使用暴力求解,一个一个比较,在n和m都极大的情况下将花费非常多的不必要的计算,那么我们有什么办法来解决呢?

  • 思路:如果我们比较了x个字符都相等,第x + 1个字符不相等,我们没必要回到一开始重新比较,因为前x个字符都已知,只要知道这x个字符能对上str2的前y个字符,再让str1的第x + 1个字符与str2的第y + 1个子符继续比较即可。

  • 例题洛谷P3375 【模板】KMP字符串匹配
  • 代码:
    #include<bits/stdc++.h>
    using namespace std;
    const int MAXN = 1e6 + 10;
    int nex[MAXN];
    void fnex(string str)
    {nex[0] = -1;int ptop = -1;int i = 0;int end = str.size();while(i < end){if(ptop == -1 || str[i] == str[ptop]){nex[++i] = ++ptop;}else{ptop = nex[ptop];}}
    }
    int main()
    {string str1,str2;cin >> str1 >> str2;int end = str1.size();fnex(str2);int i = 0;int ptop = 0;int sum = 0;int end2 = str2.size();while(i < end){if(ptop == end2){cout << i - end2 + 1 << endl;ptop = nex[ptop];}if(ptop == -1 || str1[i] == str2[ptop]){i++;ptop++;}else{ptop = nex[ptop];}}if(ptop == end2){cout << i - end2 + 1 << endl;ptop = nex[ptop];}for(int i = 1;i <= end2;i++){cout << nex[i] << ' ';}
    }

KMP算法小总结 洛谷P3375 【模板】KMP字符串匹配相关推荐

  1. sscanf小技巧-洛谷P7911 网络连接

    sscanf小技巧-洛谷P7911 网络连接 序言 本题解来源:本蒟蒻上课摸鱼 (别学我) 最近学了一个挺好用的函数--sscanf(),结合洛谷P7911 网络连接讲一下. (点击查看题目) 推荐几 ...

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

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

  3. (快速幂算法+高精度)洛谷P1045 麦森数

    前言   故事的最后,让我们以一道十分经典的题目--<麦森数>来结尾.接受现实吧,总会有我们没准备过的高精度运算出现.我们固然可以提前把高精度的快速幂模板也准备好,但是总会有百密一疏的时候 ...

  4. 深入理解 操作系统 LRU算法(以洛谷P1540题为例)

    LRU算法 LeastRecentlyUsedLeast Recently UsedLeastRecentlyUsed 算法,意为"最近最少使用",这是操作系统内存管理部分重要的一 ...

  5. 专题·树链剖分【including 洛谷·【模板】树链剖分

    初见安~~~终于学会了树剖~~~ [兴奋]当初机房的大佬在学树剖的时候我反复强调过:"学树剖没有前途的!!!" 恩.真香. 一.重链与重儿子 所谓树剖--树链剖分,就是赋予一个链的 ...

  6. 深入理解 操作系统 SJF算法(以洛谷P1223题为例)

    CPU Scheduling Algorithms 重要的CPU调度算法如下: FCFS Scheduling(First-Come, First-Served) SJF Scheduling(Sho ...

  7. 洛谷·【模板】点分树 | 震波【including 点分树

    初见安-这里是传送门:洛谷P6329 [模板]点分树 | 震波 一.点分树 其实你会点分治的话,点分树就是把点分治时的重心提出来重新连城一棵树. 比如当前点是u,求出子树v的重心root后将root与 ...

  8. 图论算法——幻象迷宫(洛谷 P1363)

    题目选自洛谷P1363 大概就是说给出一个01迷宫类的地图,按照这个地图来扩展新地图,类似这样 然后问你是不是###可以走无限远. ###那么,我们可以很清晰的意识到,如果可以从点(x,y)出发,达到 ...

  9. 【后缀数组】洛谷P3809模板题

    题目背景 这是一道模板题. 题目描述 读入一个长度为 n n n 的由大小写英文字母或数字组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置. ...

最新文章

  1. 违反计算机网络安全如何处罚,网络信息安全知识:违反治安管理行为的处罚包括()。...
  2. 给我们宿舍做的游戏--snack
  3. Win10 KMD驱动模板,应用层向内核传一个字符串,内核把它转成大写
  4. mysql mycat docker_docker-mycat-mysql
  5. iOS之网络数据下载和JSON解析
  6. 4 curses库基垫(pad)处理
  7. vue实现点击复制文本功能
  8. Python100天学习教程(Python学习视频_Python学习路线):Day01 初识Python
  9. C# 给PowerPoint文档设置背景颜色和背景图片
  10. 【资料】印度数学家拉马努金
  11. STM32时钟--基于正点原子STM32视频教程
  12. 大电流输出信号隔离转换模块
  13. change charset of existed MySQL db
  14. Python调用R出现“UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xb2” 问题
  15. 007-part5-proveofwork工作量证明
  16. lumia flash android,Lumia830吃上棉花糖!WP手机刷安卓7.1详细教程
  17. 北理工计算机2020学硕录取,北京理工大学2020硕士研究生拟录取名单
  18. HDLbits Exams/2013 q2bfsm verilog fpga
  19. 从零开始使用 IDEA 开发插件 (一)
  20. Flick Tab Control

热门文章

  1. 和大家一起分享人性中的感动!- 转老贴
  2. hive自定义函数-身份证号合法性判断
  3. 关于Springboot中JSCH使用说明
  4. [JavaScript 刷题] Code Signal - 相似数组(Are Similar?)
  5. 量子计算应用于洛杉矶港口,货物装卸效率翻倍
  6. DVD光盘的基础知识
  7. nodejs-gulp的使用
  8. 压力传感器常见故障分析检查
  9. Word中替换回车的办法
  10. 普利姆算法(prim)求最小生成树(MST)过程详解