KMP算法字符串匹配
对于暴力搜索法,当搜索词对应的字符与字符串中的字符不匹配时。将搜索词整个后移一位,再从头逐个比较。这样做虽然可行,但是效率很差,因为你要把”搜索位置”移到已经比较过的位置,重比一遍。
应用KMP算法之后,则有:
移动位数=已匹配的字符数−对应的部分匹配值移动位数 = 已匹配的字符数 - 对应的部分匹配值
“部分匹配值”就是”前缀”和”后缀”的最长的共有元素的长度。
KMP算法实现代码如下:
void prefixFun(char *pattern, int *preFun)
{int len = 0; //length of patternwhile ('\0' != pattern[len])len++;int LOLP = 0; //length of longest prefixpreFun[1] = 0;for (int NOCM = 2; NOCM <= len; NOCM++) //NOCM : number of characters matched{while (LOLP > 0 && pattern[LOLP] != pattern[NOCM-1])LOLP = preFun[LOLP];if (pattern[LOLP] == pattern[NOCM-1])LOLP++;preFun[NOCM] = LOLP;}
}void KMPstrMatching(char *target, char *pattern)
{int tarLen = 0;int patLen = 0;while ('\0' != target[tarLen])tarLen++;while ('\0' != pattern[patLen])patLen++;int *preFun = new int[patLen+1];prefixFun(pattern, preFun);int NOCM = 0; // number of characters matchedfor (int i = 0; i < tarLen; i++){while (NOCM > 0 && pattern[NOCM] != target[i])NOCM = preFun[NOCM];if (pattern[NOCM] == target[i])NOCM++;if (NOCM == patLen){cout<<"Pattern occurs with shift "<<i - patLen + 1<<endl;NOCM = preFun[NOCM];}}delete [] preFun;
}
KMP算法字符串匹配相关推荐
- C++KMP算法字符串匹配(附完整源码)
C++KMP算法字符串匹配 C++KMP算法字符串匹配完整源码(定义,实现,main函数测试) C++KMP算法字符串匹配完整源码(定义,实现,main函数测试) #include <iostr ...
- kmp算法字符串匹配C语言实现
kmp算法字符串匹配 在leetcode做题时,有道题就是写一个strstr函数,先用思路最简单的直接两个循环做,提示时间超过限制.就查了查kmp的资料 翻了下算法导论,感觉像在看数学书,看不太懂,最 ...
- KMP算法-字符串匹配(浅显易懂)
KMP的经典思想就是:当出现字符串不匹配时,可以记录一部分之前已经匹配的文本内容,利用这些信息避免从头再去做匹配. 本篇将以如下顺序来讲解KMP, 什么是KMP KMP有什么用 什么是前缀表 为什么一 ...
- KMP算法---字符串匹配
算法细节详见点击打开链接和点击打开链接 #include <stdio.h> #include <stdlib.h> #define N 7 #define M 15 void ...
- 算法 - KMP算法(字符串匹配)
百度的一个图文介绍http://www.sohu.com/a/336648975_453160 package Algorithm.kmp;import java.util.Arrays;public ...
- [JAVA][算法] [字符串匹配]KMP
我们为什么需要KMP? 在字符串匹配问题中,我们需要找到匹配串pattern在原串text中的位置,一种显而易见的思路就是暴力匹配,如图所示,我们把pattern放置到text中的每个位置进行比较即可 ...
- 字符串算法之KMP(字符串匹配)
一.背景 给定一个主串(以 S 代替)和模式串(以 P 代替),要求找出 P 在 S 中出现的位置,此即串的模式匹配问题. Knuth-Morris-Pratt 算法(简称 KMP)是解决这一 ...
- 数据结构与算法 / 字符串匹配 / BF、PK 算法
零.前言 为了下面便于说明,先定义两个名词,分别是主串和模式串.在字符串 A 中查找字符串 B,则 A 为主串,B 为模式串. 假设,主串中字符数量为 L1,模式串的字符数量为 L2 . 一.BF 算 ...
- 头歌-数据结构与算法-字符串匹配
第1关:实现朴素的字符串匹配 #include <stdio.h> #include <stdlib.h> #include "mystr.h" #prag ...
最新文章
- 深度学习在超市商品识别中的解决方案分享
- html textarea换行和dom换行
- python飞机大战源代码-制作python程序windows安装包(飞机大战源码)
- maven开发mybatis 让*.xml 拷贝到classes目录下
- 杭电2062java实现
- 【流量】一觉醒来发现CSDN博客访问量增加十倍!原来是这个原因
- DB2更改数据文件路径
- python写进程_将数据作为后台进程在Python中写入磁盘
- 人脸识别腾讯安排上了!孩子不能再任意冒用家长身份信息
- etl构建数据仓库五步法_构建数据仓库五步法
- windows java 进程_windows下java -jar 后台运行以及杀死后台进程的操作
- python alpha量化交易软件_2019AI量化交易教程视频 AI量化交易模型教程 alpha量化选股模型交易系统 CTA型量化策略教程...
- 2019 年(B题)巡线机器人
- HDU5142 NPY and FFT BestCoder Round #22 1001
- python selenium 异常:selenium.common.exceptions.ElementClickInterceptedException
- ARM 发布新一代 CPU 和 GPU,实现 20% 性能提升!
- 广义相对论基础【2】广义相对论中的张量+张量代数
- 30 年的 Hello world
- 携手共进 智享未来丨美格智能2023年代理商合作伙伴大会成功举办
- EasyRecovery免费激活软件秘钥下载恢复教程及注意事项