有关字符串匹配的最有效的算法。

其算法复杂度为两个字符串的长度之和(m+n)。

与C语言版本想比,这个版本只是使用C++语法,功能还是被封装在函数中。

#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <vector>using namespace std;inline void NEXT(const string &T, vector<int> &next)
{//按模式串生成vector,next(T.size())next[0]=-1;for(int i=1; i<T.size(); i++) {int j = next[i-1];while(T[i] != T[j+1] && j >= 0)j = next[j];//递推计算if(T[i] == T[j+1])next[i] = j+1;elsenext[i] = 0;}
}inline string::size_type COUNT_KMP(const string &S, const string &T)
{//利用模式串T的next函数求T在主串S中的个数count的KMP算法//其中T非空,vector<int> next(T.size());NEXT(T, next);string::size_type index, count=0;for(index=0; index<S.size(); ++index){int pos=0;string::size_type iter=index;while(pos<T.size() && iter<S.size()){if(S[iter] == T[pos]){++iter;++pos;} else {if(pos == 0)++iter;elsepos = next[pos-1] + 1;}}//whileendif(pos==T.size() && (iter-index)==T.size())++count;}//forendreturn count;
}int main(void)
{string S="abaabcacabaabcacabaabcacabaabcacabaabcac";string T="ab";string::size_type count=COUNT_KMP(S,T);cout << count << endl;return 0;
}

KMP算法(C++版)相关推荐

  1. 字符串匹配算法(KMP算法JAVA版)

    目录 暴力匹配 KMP算法 暴力匹配 暴力算法就是 普通模式的匹配算法 bf算法就是将目标的字符串 的第一个字符与模式的第一个字符进行匹配,相等的话就继续比较第二个字符是否是匹配的,依次进行下去,如果 ...

  2. KMP算法求next数组

    1.简介 Knuth-Morris-Pratt 算法,简称 \text{KMP}KMP 算法,由 \text{Donald Knuth}Donald Knuth.\text{James H. Morr ...

  3. LeetCode第28题 实现strStr()之KMP算法(C++)【代码已提交成功】

    目录 初步思路 朴素匹配算法 KMP算法 NEXT数组 利用NEXT数组改进朴素匹配算法 初步思路 这是一道难度为简单的题,所以不熟悉的话可能第一反应就是朴素匹配的算法.但因为考研的时候学过数据结构, ...

  4. 数据结构(C语言版)严蔚敏(字符串的模式匹配算法--KMP算法)

    数据结构(C语言版)严蔚敏(字符串的模式匹配算法–KMP算法) 1.暴力匹配算法 // 暴力匹配算法 int Index2(SString S,SString T) {// S是主串,T是子串int ...

  5. 数据结构——KMP算法(难懂版,但还是看看吧)

    据说这个算法很难,起初看了<大话数据结构>,知道了这个算法,但是没看懂没理解,然后看其他博客,尽管博客上写着易懂,好理解,但我仍然看不懂,不理解,心里一直在口吐芬芳. 后来我看了几个版本的 ...

  6. KMP算法原理详解_论文解读版

    1. KMP算法 KMP算法是一种保证线性时间的字符串查找算法,由Knuth.Morris和Pratt三位大神发明,而算法取自这三人名字的首字母,因而得名KMP算法. 那发明这样的字符串查找算法又有什 ...

  7. KMP算法真的有这么难吗?(清晰详细版)

    KMP算法我一年之前就接触了,但由于实在难以理解next[]求法故放弃,每次做一次字符串匹配的时候,很多情况下都是暴力解决,除了极个别情况把next[]求法背成模板求解AC. 注意:KMP算法已经成为 ...

  8. KMP算法(待优化)--2015年7月25日14:04:25V1.0版

    #include <iostream> #include <string> #include <cstring> using namespace std;void ...

  9. KMP算法(严蔚敏数据结构第二版)

    KMP算法之前看过一次,看了好久才看明白,今天又学的时候发现啥也不会了,又看了好久,在这里整理一下思路,方便以后复习. 算法介绍 在我们常规的模式匹配算法中,每当匹配失败时,模式串都从第一个字符开始重 ...

最新文章

  1. 今天被TensorFlowLite刷屏了吧,偏要再发一遍
  2. 《大数据、小数据、无数据:网络世界的数据学术》一 3.3 社会与技术
  3. Worksheet.get_Range Method
  4. 九度OJ 1434 今年暑假不AC
  5. hadoop 动态调整mapred参数
  6. Windows平台下Makefile学习笔记
  7. 深度解读服务治理 ServiceMesh、xDS
  8. 【NIO】之IO和NIO的区别
  9. oracle空例程,2018.5.29 Oracle连接到空闲例程
  10. vonic 环境配置_vonic单页面应用
  11. vc2013使用经验
  12. XShell免费版的安装配置教程以及使用教程(超级详细、保姆级)
  13. LDA模型理解(一)
  14. html5 drag移动位置,HTML5拖拽功能drag
  15. 【实习生面试】阿里前端实习生一面流程及题目
  16. php微博采集,微博采集方法
  17. µC/OS-II Release Notes
  18. drawio二次开发
  19. 特殊节日网站全体变成黑灰色
  20. 我精心整理的一些大牌男装正品店

热门文章

  1. Discuz3.2开启图片列表显示教程
  2. 一篇文章读懂开源web引擎Crosswalk
  3. 计算机网络email服务的配置,计算机网络邮件配置实验报告
  4. Android实现EditText插入表情、超链接等格式
  5. strategy dynamic参数的使用
  6. Python之面向对象 私有属性和私有方法
  7. Caused by: java.sql.SQLException: Unable to open a test connection to the given database报错无法打开到给定数据库
  8. android 滑动缩放监听,基于Android的ViewPager动画特效实现页面左右滑动效果(实现缩放...
  9. 消息队列(MQ):ZeroMQ基本原理
  10. 根据前序、中序构建二叉树