【C++】KMP算法代码实现
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算法代码实现相关推荐
- javaKMP算法(含KMP算法代码)
目录 一:应用场景-字符串匹配问题 二:暴力匹配算法 三:KMP 算法介绍 四:KMP 算法最佳应用-字符串匹配问题 字符串匹配问题: 思路分析图解 五:代码展示 一:应用场景-字符串匹配问题 字符串 ...
- c语言kmp算法代码,C语言KMP算法的实现
KMP算法在模式与主串之间存在许多"部分匹配"的情况下,比BF算法快.(注意,接下来的串都是以下标为1作为起始储存位置.) 下面说一下实现代码: 首先是预定义和类型定义: #def ...
- LeetCode第28题 实现strStr()之KMP算法(C++)【代码已提交成功】
目录 初步思路 朴素匹配算法 KMP算法 NEXT数组 利用NEXT数组改进朴素匹配算法 初步思路 这是一道难度为简单的题,所以不熟悉的话可能第一反应就是朴素匹配的算法.但因为考研的时候学过数据结构, ...
- a - 数据结构实验之串一:kmp简单应用_串的两种模式匹配方式(BF/KMP算法)
串的两种模式匹配方式(BF/KMP算法) 前言 串,又称作字符串,它是由0个或者多个字符所组成的有限序列,串同样可以采用顺序存储和链式存储两种方式进行存储,在主串中查找定位子串问题(模式匹配)是串中最 ...
- [转]数据结构KMP算法配图详解(超详细)
KMP算法配图详解 前言 KMP算法是我们数据结构串中最难也是最重要的算法.难是因为KMP算法的代码很优美简洁干练,但里面包含着非常深的思维.真正理解代码的人可以说对KMP算法的了解已经相当深入了.而 ...
- KMP算法详细讲解(看完不会请打我)
文章目录 前言 一:情景导入-如何快速在一个主串找到目标字符串 二:详解KMP (1)暴力匹配的缺点 (2)最长相同前缀和后缀 (3)究竟怎么回溯 (3)next数组 (4)求解next数组 A:ne ...
- 查找子字符串----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 ...
- 《数据结构》实验报告四:串的模式匹配(BF算法、KMP算法)
一.实验目的 1.了解串的基本概念. 2.掌握串的模式匹配算法的实现 . 二.实验预习 说明以下概念 1.模式匹配: 串的模式匹配就是子串的定位运算. 设有两个字符串 S 和 T ,S为主串(正文串) ...
- 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 ...
最新文章
- J. Cheminform. | DrugEx v2:多重药理学中基于pareto的多目标强化学习的药物分子从头设计...
- MySQL 5.7 并行复制实现原理与调优
- 如何更新android v7 support library,新手入门之Android Support Library | Soo Smart!
- 反向传播算法_9.3 反向传播算法的直观理解 Backpropagation Intuition
- ble gatt核心结构
- 一个关于clear()、吸收缓存区的帖子引发的思考
- php程序包括什么,php程序是什么
- Spring之IOC容器
- Android系统Surface机制的SurfaceFlinger服务渲染应用程序UI的过程分析(2)
- iOS:关于加载GIF图片的思考
- SLF4J user manual
- DelayQueue浮光掠影
- 论文笔记:Composable Sparse Fine-Tuning for Cross-Lingual Transfer
- 利用 Python 进行量化投资分析 - 利率及风险资产的超额收益
- 密文编码与加密算法应用
- 在Windows系统下,手把手教你制作属于自己的星际译王词典
- Practical_RichFaces要点Chapter11
- Angular入门-Hero Editor抽丝
- Picosmos 一键智能抠图
- 3D人脸建模系统市场现状研究分析-