KMP模式匹配算法的实现:

利用KMP模式匹配算法在主串中查找指定模式串。如果主串包含该模式串,则返回该模式串在主串中的序号;否则返回-1。

输入样例:

abcddabcababcdaabcababcdaabcabaa(主串)

abcdaabcab(模式串)

输出样例:

-1    0     0     0     -1    1     0     0     3     0(模式串的优化版的next向量)

10(模式串在主串中的序号,主串中元素从0开始编号)

//KMP算法实现
//author:Mitchell_Donovan
//date:3.30
#include<iostream>
#include<cstring>
#include<cassert>
using namespace std;int* findNext(string stringValue) {int i = 0;int j = -1;int size = stringValue.length();assert(size > 0);int* next = new int[size];assert(next != 0);//若开辟存储区域失败,退出next[0] = -1;while (i < size) {while (j >= 0 && stringValue[i] != stringValue[j]) {j = next[j];}i++;j++;if (i == size) {break;}if (stringValue[i] == stringValue[j]) {next[i] = next[j];}else {next[i] = j;}}return next;
}int KMPStingMatching(const string T, const string P, int* next) {int i = 0;int j = 0;int pLen = P.length();int tLen = T.length();if (tLen < pLen) {return -1;}while (i < pLen && j < tLen) {if (i == -1 || T[j] == P[i]) {i++;j++;}else {i = next[i];}}if (i >= pLen) {return j - pLen + 1;}else {return -1;}
}int main() {string P = "abcdaabcab";string T = "abcddabcababcdaabcababcdaabcaba";for (int i = 0; i < P.length(); i++) {cout << findNext(P)[i] << " ";}cout << endl;cout << KMPStingMatching(T, P, findNext(P));
}

【C++】KMP算法代码实现相关推荐

  1. javaKMP算法(含KMP算法代码)

    目录 一:应用场景-字符串匹配问题 二:暴力匹配算法 三:KMP 算法介绍 四:KMP 算法最佳应用-字符串匹配问题 字符串匹配问题: 思路分析图解 五:代码展示 一:应用场景-字符串匹配问题 字符串 ...

  2. c语言kmp算法代码,C语言KMP算法的实现

    KMP算法在模式与主串之间存在许多"部分匹配"的情况下,比BF算法快.(注意,接下来的串都是以下标为1作为起始储存位置.) 下面说一下实现代码: 首先是预定义和类型定义: #def ...

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

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

  4. a - 数据结构实验之串一:kmp简单应用_串的两种模式匹配方式(BF/KMP算法)

    串的两种模式匹配方式(BF/KMP算法) 前言 串,又称作字符串,它是由0个或者多个字符所组成的有限序列,串同样可以采用顺序存储和链式存储两种方式进行存储,在主串中查找定位子串问题(模式匹配)是串中最 ...

  5. [转]数据结构KMP算法配图详解(超详细)

    KMP算法配图详解 前言 KMP算法是我们数据结构串中最难也是最重要的算法.难是因为KMP算法的代码很优美简洁干练,但里面包含着非常深的思维.真正理解代码的人可以说对KMP算法的了解已经相当深入了.而 ...

  6. KMP算法详细讲解(看完不会请打我)

    文章目录 前言 一:情景导入-如何快速在一个主串找到目标字符串 二:详解KMP (1)暴力匹配的缺点 (2)最长相同前缀和后缀 (3)究竟怎么回溯 (3)next数组 (4)求解next数组 A:ne ...

  7. 查找子字符串----KMP算法深入剖析

    假设主串:a b a b c a b c a c b a b       子串:a b c a c 1.一般匹配算法 逐个字符的比较,匹配过程如下: 第一趟匹配 a b a b c a b c a c ...

  8. 《数据结构》实验报告四:串的模式匹配(BF算法、KMP算法)

    一.实验目的 1.了解串的基本概念. 2.掌握串的模式匹配算法的实现 . 二.实验预习 说明以下概念 1.模式匹配: 串的模式匹配就是子串的定位运算. 设有两个字符串 S 和 T ,S为主串(正文串) ...

  9. KMP算法图文详解(为什么是next[0]=-1、next[j]=k和k=next[k])

    文章目录 一:KMP算法解决的问题 二:详解KMP (1)暴力匹配的缺点 (2)最长相同前缀和后缀 (3)究竟怎么回溯 (3)next数组 (4)求解next数组 A:next[0]=-1 B:nex ...

最新文章

  1. J. Cheminform. | DrugEx v2:多重药理学中基于pareto的多目标强化学习的药物分子从头设计...
  2. MySQL 5.7 并行复制实现原理与调优
  3. 如何更新android v7 support library,新手入门之Android Support Library | Soo Smart!
  4. 反向传播算法_9.3 反向传播算法的直观理解 Backpropagation Intuition
  5. ble gatt核心结构
  6. 一个关于clear()、吸收缓存区的帖子引发的思考
  7. php程序包括什么,php程序是什么
  8. Spring之IOC容器
  9. Android系统Surface机制的SurfaceFlinger服务渲染应用程序UI的过程分析(2)
  10. iOS:关于加载GIF图片的思考
  11. SLF4J user manual
  12. DelayQueue浮光掠影
  13. 论文笔记:Composable Sparse Fine-Tuning for Cross-Lingual Transfer
  14. 利用 Python 进行量化投资分析 - 利率及风险资产的超额收益
  15. 密文编码与加密算法应用
  16. 在Windows系统下,手把手教你制作属于自己的星际译王词典
  17. Practical_RichFaces要点Chapter11
  18. Angular入门-Hero Editor抽丝
  19. Picosmos 一键智能抠图
  20. 3D人脸建模系统市场现状研究分析-

热门文章

  1. oracle中net manager使用
  2. sequelize多条件_Sequelize操作MySQL基本用法
  3. 信宜市白石镇白鸡龙狗洞
  4. 第一章 SQL谓词的概述(一)
  5. 杭州地铁流量预测---数据处理
  6. 51单片机——DS18B20温度传感器
  7. 刚出生产线上的工业路由器,为何还要做老化测试?
  8. closewait(closewait过多会有什么后果)
  9. Adobe Camera Raw 11.3.0 Mac 增效插件专业摄影新必备工具
  10. 北京内推 | 微软亚洲研究院机器学习组招聘说话人脸生成方向研究实习生