对于暴力搜索法,当搜索词对应的字符与字符串中的字符不匹配时。将搜索词整个后移一位,再从头逐个比较。这样做虽然可行,但是效率很差,因为你要把”搜索位置”移到已经比较过的位置,重比一遍。

应用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算法字符串匹配相关推荐

  1. C++KMP算法字符串匹配(附完整源码)

    C++KMP算法字符串匹配 C++KMP算法字符串匹配完整源码(定义,实现,main函数测试) C++KMP算法字符串匹配完整源码(定义,实现,main函数测试) #include <iostr ...

  2. kmp算法字符串匹配C语言实现

    kmp算法字符串匹配 在leetcode做题时,有道题就是写一个strstr函数,先用思路最简单的直接两个循环做,提示时间超过限制.就查了查kmp的资料 翻了下算法导论,感觉像在看数学书,看不太懂,最 ...

  3. KMP算法-字符串匹配(浅显易懂)

    KMP的经典思想就是:当出现字符串不匹配时,可以记录一部分之前已经匹配的文本内容,利用这些信息避免从头再去做匹配. 本篇将以如下顺序来讲解KMP, 什么是KMP KMP有什么用 什么是前缀表 为什么一 ...

  4. KMP算法---字符串匹配

    算法细节详见点击打开链接和点击打开链接 #include <stdio.h> #include <stdlib.h> #define N 7 #define M 15 void ...

  5. 算法 - KMP算法(字符串匹配)

    百度的一个图文介绍http://www.sohu.com/a/336648975_453160 package Algorithm.kmp;import java.util.Arrays;public ...

  6. [JAVA][算法] [字符串匹配]KMP

    我们为什么需要KMP? 在字符串匹配问题中,我们需要找到匹配串pattern在原串text中的位置,一种显而易见的思路就是暴力匹配,如图所示,我们把pattern放置到text中的每个位置进行比较即可 ...

  7. 字符串算法之KMP(字符串匹配)

    一.背景   给定一个主串(以 S 代替)和模式串(以 P 代替),要求找出 P 在 S 中出现的位置,此即串的模式匹配问题.   Knuth-Morris-Pratt 算法(简称 KMP)是解决这一 ...

  8. 数据结构与算法 / 字符串匹配 / BF、PK 算法

    零.前言 为了下面便于说明,先定义两个名词,分别是主串和模式串.在字符串 A 中查找字符串 B,则 A 为主串,B 为模式串. 假设,主串中字符数量为 L1,模式串的字符数量为 L2 . 一.BF 算 ...

  9. 头歌-数据结构与算法-字符串匹配

    第1关:实现朴素的字符串匹配 #include <stdio.h> #include <stdlib.h> #include "mystr.h" #prag ...

最新文章

  1. 深度学习在超市商品识别中的解决方案分享
  2. html textarea换行和dom换行
  3. python飞机大战源代码-制作python程序windows安装包(飞机大战源码)
  4. maven开发mybatis 让*.xml 拷贝到classes目录下
  5. 杭电2062java实现
  6. 【流量】一觉醒来发现CSDN博客访问量增加十倍!原来是这个原因
  7. DB2更改数据文件路径
  8. python写进程_将数据作为后台进程在Python中写入磁盘
  9. 人脸识别腾讯安排上了!孩子不能再任意冒用家长身份信息
  10. etl构建数据仓库五步法_构建数据仓库五步法
  11. windows java 进程_windows下java -jar 后台运行以及杀死后台进程的操作
  12. python alpha量化交易软件_2019AI量化交易教程视频 AI量化交易模型教程 alpha量化选股模型交易系统 CTA型量化策略教程...
  13. 2019 年(B题)巡线机器人
  14. HDU5142 NPY and FFT BestCoder Round #22 1001
  15. python selenium 异常:selenium.common.exceptions.ElementClickInterceptedException
  16. ARM 发布新一代 CPU 和 GPU,实现 20% 性能提升!
  17. 广义相对论基础【2】广义相对论中的张量+张量代数
  18. 30 年的 Hello world
  19. 携手共进 智享未来丨美格智能2023年代理商合作伙伴大会成功举办
  20. EasyRecovery免费激活软件秘钥下载恢复教程及注意事项

热门文章

  1. Pr 入门教程:如何创建项目?
  2. 解决WIN10 连接蓝牙音响卡顿的问题
  3. 华为服务器centos系统安装教程,centos服务器安装教程
  4. 表情包壁纸独立后台美化二开版本新增加神器功能微信小程序源码下载+教程自动采集
  5. 05-PS使用中性灰、双曲线加深减淡方法
  6. PB3------TIM2_CH2通道的pwm配置及注意事项
  7. LifeSize针对互联网行业的高清视频会议协作解决方案
  8. 硕士到博士一路走来的科研感悟
  9. PLC控制柜的布局与结构设计
  10. 程序员必备:炫酷樱桃轴机械键盘,免费包邮送到家!