1、KMP算法解决问题:对BF(Brute Force)算法优化,避免对主串进行回溯匹配(匹配不成功主串指针向后移1位,子串指针重置开始位置,两串继续匹配),效率底。

2、KMP算法原则/目的:主串不回溯即匹配指针就指在失配位置,由子串/模式串移动,由这样模式完成字符串匹配。

3、KMP算法怎样实现目的:通过子串/模式前后缀是否存在匹配情况,来决定子串/模式是否需要在失配位置前移子串/模式。

注意:子串/模式前后缀要取最长匹配,这样才能保证不会错过主串中任何一个拥有与子串开头相同的位置。

3.1、子串/模式前后缀为零,子串/模式指针指向开始位置,主串与子串从失配位置开始匹配。

为什么可以这样?因为失配之前主串与子串的字符都是一样的,而且前后缀为零表示子串没有相同的字符。

这样的话假如主串回溯回去匹配能匹配上吗? 肯定匹配不上的。

第一次匹配不上后,第二次匹配直接从失配位置开始匹 配。为什么可以这样?因为abc已经匹配上,而且子串abc各字母又不相同,

如果继续主串错一位与子串匹配,这样浪费时间。

KMP算法理解的更多相关文章

  1. 关于KMP算法理解(快速字符串匹配)

    参考:http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html 2016-08- ...

  2. [转]KMP算法理解及java实现

    这大概是我看的最好懂的KMP算法讲解了,不过我还只弄懂了大概思想,算法实现我到时候用java实现一遍 出处:知乎 https://www.zhihu.com/question/21923021/ans ...

  3. KMP算法理解(转)

    (作者matrix67) KMP算法是拿来处理字符串匹配的.换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串).比如,字符串A="I'm matrix67&quo ...

  4. kmp算法理解与记录

    字符串匹配的暴力解法 给定字符串s和p,寻找字符串p在字符串s中出现的位置,暴力解法如下所示: 如果当前字符匹配成功,++i;++j,继续匹配下一字符. 如果s[i]与s[j]匹配失败,令i-=(j- ...

  5. 初涉KMP算法

    久仰字符串系列理论 KMP 讲解(引用自bzoj3670动物园) 某天,园长给动物们讲解KMP算法. 园长:“对于一个字符串S,它的长度为L.我们可以在O(L)的时间内,求出一个名为next的数组.有 ...

  6. 不能更通俗了!KMP算法实现解析

    我之前对于KMP算法理解的也不是很到位,如果很长时间不写KMP的话,代码就记不清了,今天刷leetcode的时候突然决定干脆把它彻底总结一下,这样即便以后忘记了也好查看.所以就有了这篇文章. 本文在于 ...

  7. 深入理解KMP算法

    前言:本人最近在看<大话数据结构>字符串模式匹配算法的内容,但是看得很迷糊,这本书中这块的内容感觉基本是严蔚敏<数据结构>的一个翻版,此书中给出的代码实现确实非常精炼,但是个人 ...

  8. KMP算法简明扼要的理解

    KMP算法也算是相当经典,但是对于初学者来说确实有点绕,大学时候弄明白过后来几年不看又忘记了,然后再弄明白过了两年又忘记了,好在之前理解到了关键点,看了一遍马上又能理解上来.关于这个算法的详解网上文章 ...

  9. KMP算法 --- 深入理解next数组

    在KMP算法中有个数组,叫做前缀数组,也有的叫next数组. 每一个子串有一个固定的next数组,它记录着字符串匹配过程中失配情况下可以向前多跳几个字符. 当然它描述的也是子串的对称程度,程度越高,值 ...

随机推荐

  1. add-binary 字符串操作,二进制字符串相加

    Given two binary strings, return their sum (also a binary string). For example,a ="11"b =& ...

  2. java 将数字转成成16进制

      java 将数字转成成16进制 CreationTime--2018年6月11日17点11分 Author:Marydon 1.前提 数字必须是byte类型,即[-128,127] 2.代码实现 ...

  3. V-rep学习笔记:外部函数调用方式

    The remote API functions are interacting with V-REP via socket communication in a way that reduces l ...

  4. 十大经典排序算法-JS篇

    http://web.jobbole.com/87968/ 虽然是JS篇,但其他编程语言(例如java)实现起来是差不多的.

  5. Axure 验证码、进度条、分页条(翻页)、搜索框、选项卡

    百度网盘:http://pan.baidu.com/s/1jHP4qsm

  6. java new关键字

    //new关键字://1.表示创建一个对象//2.表示实例化对象//3.表示申请内存空间 在python中其实就是一个实例化的过程

  7. Window磁盘错误修复chkdsk

    场景: 狗日的垃圾移动磁盘.U盘质量太差劲,会出现磁盘坏道.读写异常~心疼数据.... 命令: 01.Win+R 调出cmd 02.根据移动盘符或磁盘盘符,进行修复 03.执行修复chkdsk /f  ...

  8. 转:Ogre内部渲染流程

    以下是 Ogre 的代码中的详细说明: Renderable是OGRE中所有可渲染对象的抽象接口 这个接口抽象出了在渲染管线中的被分组的离散的可渲染对象基本的方法. 此接口的实现类必须是基于单一的材质 ...

  9. java 下对字符串的格式化

    1.对整数进行格式化:%[index$][标识][最小宽度]转换方式         我们可以看到,格式化字符串由4部分组成,其中%[index$]的含义我们上面已经讲过,[最小宽度]的含义也很好理解 ...

  10. iOS No matching provisioning profile found for "Applicartion/xxx.app"的解决方案

    最近对一个旧项目更新功能时,遇到了一个问题: No matching provisioning profile found for "Applicartion/xxx.app" 如 ...