当前位置: 首页 > news >正文

KMP算法初步认知

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

在字符串S(string)中找到匹配的字符串P(pattern)

第一种想法:// 利用最简单的循环结构

    for(m=0; m<...;m++)    // m -> start position

        for(i=0; i<...; i++)    // offset from m

            if(S[m+i] == P[i])....

            else ....

------------------------------------------------------------------------------------------------------------------------------

第二种:KMP算法

    

------------------------------------------------------------------------------------------------------------------------------

我遇到不懂得术语总会先百度一下,然后再在维基上找资料,那么我们也以它上面的例子作为我这个分析方法的实践:

S: ABC ABCDAB ABCDABCDABDE
P: ABCDABD


Step 1: m=0, i=3 出现不匹配,形成临时字符串 ABC,明显首尾完全不同,p = 0,m = m + i - p, m = 3;

Step 2: m=3, i=0, p=-1(如果还是0就停在那个位置了,所以用了一个技巧,使之向右移动一位), m = 4;

Step 3: m=4,i=6, "ABCDAB", p=2, m=4+6-2=8;

Step 4: m=8,i=3, "AB", p=0, m=11;

Step 5: m=11,i=6,"ABCDAB", p=2, m=15;

Step 6: m=15,i=6, 找到匹配的了!如果还想找下一个,令 m = m + i ,重复这样的步骤即可,注意将这些位置保存起来,比如第一个匹配到的字符串位置是 15 !

转载于:https://my.oschina.net/u/660818/blog/81285

相关文章:

  • PHP 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数, 使其和等于m ,要求将其中所有的可能组合列出来...
  • 超凡蜘蛛侠
  • 简单的多进程Open×××前端控制程序
  • asymptote 中使用中文
  • Deprecated: Function ereg() is deprecated in
  • 家庭电力网络摄像机
  • Redis学习系列
  • 必须关注的25位知名JavaScript开发者
  • CCNP路 由 选 择 原 理
  • 伸展树的学习(二):源代码分析
  • 多线程之NSInvocationOperation
  • 内存溢出和内存泄漏的区别
  • 发文庆祝我被骗了2000块
  • java基础----泛型!
  • 实现业务系统中的用户权限管理--设计篇
  • 【comparator, comparable】小总结
  • Android 控件背景颜色处理
  • Android交互
  • Fastjson的基本使用方法大全
  • flask接收请求并推入栈
  • GitUp, 你不可错过的秀外慧中的git工具
  • GraphQL学习过程应该是这样的
  • Js基础——数据类型之Null和Undefined
  • PHP 7 修改了什么呢 -- 2
  • React-redux的原理以及使用
  • Ruby 2.x 源代码分析:扩展 概述
  • Tornado学习笔记(1)
  • Vue ES6 Jade Scss Webpack Gulp
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 官方解决所有 npm 全局安装权限问题
  • 基于遗传算法的优化问题求解
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 前嗅ForeSpider中数据浏览界面介绍
  • 入门级的git使用指北
  • 时间复杂度与空间复杂度分析
  • 手机端车牌号码键盘的vue组件
  • 手写一个CommonJS打包工具(一)
  • 详解移动APP与web APP的区别
  • 一道面试题引发的“血案”
  • 源码安装memcached和php memcache扩展
  • 找一份好的前端工作,起点很重要
  • hi-nginx-1.3.4编译安装
  • ​卜东波研究员:高观点下的少儿计算思维
  • #### go map 底层结构 ####
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (10)STL算法之搜索(二) 二分查找
  • (4)logging(日志模块)
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (阿里云万网)-域名注册购买实名流程
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (过滤器)Filter和(监听器)listener
  • (接口自动化)Python3操作MySQL数据库
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致