学习知乎大牛 https://www.zhihu.com/question/21923021 笔记![在这里插入图片描述](https://img-blog.csdnimg.cn/20200618090222528.png?x-oss-process=imag
代码把握住 i和j指向的是啥就好接受了,i指向的next数组的下标 只能递增j指向i所指字符之前的字符串的最大交集前缀末尾+1的下标

也就是说 只有if里面的成立了 才执行next[]的新赋值。

else 语句是:
当串不能在上一最大交集串的基础上增加时(也就是P[i]!=p[j]),检查最大交集前缀字符串里next值

此处next[3]等于1,j=next[j],j的值成为1,指向串的最大前后缀交集的前缀的尾。

一定记得j指向的是什么?next[j]指的又是什么?

用文字表述下代码的流程

1、给j和i和next[i]赋初值
2、只要next数组没有计算完成进行以下步骤
3、j == -1(判断开始?)或者p[i] ==p[j](主串的前缀尾与后缀尾是否一致?)
4、若一致赋值next[i] = j; j指向字串最大前缀后一个字符串,同时也代表前缀后缀交集的最大长度。
5、若不满足3条件,则代表前缀后缀交集没法增加了,所以就缩短前缀。。。。。此处又卡住了。。。。。。如图1,显然后缀尾与前缀尾不一致,需要缩短长度,那么缩短长度为多少呢?

需要看前缀next值了,也就是abab 不行,就找aba的前后缀交集

发现此时j指向了b,一样j指向的公共交集的前缀尾字符a,在后缀就有一样的字符a,
然后判断 ab 是否 匹配 ac

乱七八糟 ,,,一定要感受那个中庸的思想,太极生两仪,两仪生四象,四象生八卦。。。
主串分前后缀。。前或后缀再分前或后缀。。。

KMP算法 学习笔记相关推荐

  1. 数据结构与算法 学习笔记(5):字符串

    数据结构与算法 学习笔记(5)- 字符串 本次笔记记录了LeetCode中关于字符串的一些问题,并给出了相应的思路说明和代码.题目编号与LeetCode对应,方便查找. 题目1:LeetCode 13 ...

  2. 大顶堆删除最大值_算法学习笔记(47): 二叉堆

    堆(Heap)是一类数据结构,它们拥有树状结构,且能够保证父节点比子节点大(或小).当根节点保存堆中最大值时,称为大根堆:反之,则称为小根堆. 二叉堆(Binary Heap)是最简单.常用的堆,是一 ...

  3. Manacher算法学习笔记 | LeetCode#5

    Manacher算法学习笔记 DECLARATION 引用来源:https://www.cnblogs.com/grandyang/p/4475985.html CONTENT 用途:寻找一个字符串的 ...

  4. 数据结构与算法学习笔记之 从0编号的数组

    数据结构与算法学习笔记之 从0编号的数组 前言 数组看似简单,但掌握精髓的却没有多少:他既是编程语言中的数据类型,又是最基础的数据结构: 一个小问题: 为什么数据要从0开始编号,而不是 从1开始呢? ...

  5. 输出dag的所有拓扑排序序列_算法学习笔记(53): 拓扑排序

    拓扑排序是对DAG(有向无环图)上的节点进行排序,使得对于每一条有向边 , 都在 之前出现.简单地说,是在不破坏节点 先后顺序的前提下,把DAG拉成一条链.如果以游戏中的科技树(虽然名字带树,其实常常 ...

  6. 算法学习笔记:对指定金额计算最少钞票数

    算法学习笔记:对指定金额计算最少钞票数 一.引出问题 财务人员给员工发工资时经常遇到这样一个问题,即根据每个人的工资额(以元作为单位)计算出各种面值的钞票的张数,且要求总张数最少.例如,某职工工资为3 ...

  7. matlab中x从0到5不含0,关于MATLAB的数学建模算法学习笔记

    关于MATLAB的数学建模算法学习笔记 目录 线性规划中应用: (3) 非线性规划: (3) 指派问题;投资问题:(0-1问题) (3) 1)应用fmincon命令语句 (3) 2)应用指令函数:bi ...

  8. 机器学习篇01:在线学习的支持向量机算法学习笔记

    在线学习的支持向量机算法学习笔记 oisvm算法实现说明 oisvm算法实现说明 % 本程序是用于实现基于在线学习的调制信号识别的程序 % % % 第一步:调制信号的生成 % 首先是7个信号:2ASK ...

  9. 数据结构与算法学习笔记之 提高读取性能的链表(上)

    数据结构与算法学习笔记之 提高读取性能的链表(上) 前言 链表(Linked list)比数组稍微复杂一点,在我们生活中用到最常见的应该是缓存,它是一种提高数据读取性能的技术,常见的如cpu缓存,浏览 ...

  10. l2-004 这是二叉搜索树吗?_算法学习笔记(45): 二叉搜索树

    二叉搜索树(Binary Search Tree, BST)是一种常用的数据结构,在理想情况下,它可以以 的复杂度完成一系列修改和查询,包括: 插入一个数 删除一个数 查询某数的排名(排名定义为比该数 ...

最新文章

  1. spring知识概要
  2. 王道操作系统考研笔记——2.1.9 调度算法
  3. 洛谷P2023 [AHOI2009]维护序列
  4. Visual Studio自动生成XML类和JSON类
  5. OLED12864 液晶屏
  6. 善用佳软推荐几个很好用的软件以备使用
  7. 求小于100的所有合数 python_python100例
  8. 黑马程序员-学习日志-文件的合并
  9. 简约至上(交互设计四策略)
  10. 雷军若愿“赌”服输给董明珠10亿元 他的身家还会剩下多少?
  11. mysql 导入unl文件_informix数据库及数据导入导出
  12. 无憾,2019!加油,2020!
  13. 研究生“计算机通信新技术”课程复习题(2016年)
  14. nodejs01——安装及使用、服务端及客户端、commonjs规范、fs模块的使用(文件操作及目录操作)、stream、buffer、WebServer、端口、动态资源及静态资源、头信息、请求方式
  15. 在同一个二维坐标系绘制出一元二次曲线, sin正弦、cos余弦曲线 (numpy,matplotlib.pyplot )
  16. 华为云 IoT 物联网数据分析能力详解
  17. php和c#短信接口,C#代码示例_短信接口 | 微米-中国领先的短信彩信接口平台服务商...
  18. 研招考试科目计算机专业课408代表什么?
  19. 阿里云分析型数据库MySQL版(AnalyticDB)测试初体验
  20. 洛谷 P2258 子矩阵

热门文章

  1. HashMap 的底层源码分析
  2. dategridview代码选中行_使用IntelliJ IDEA进行Java代码调试的技巧
  3. html5 游戏 算法,JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
  4. linux 显存占用内存,Linux服务器内存、CPU、显卡、硬盘使用情况查看
  5. eclipse java machine_打开Eclipse弹出“No java virtual machine was found...的解决方法
  6. mybatis插入时间_深入分析MyBatis源码
  7. SQL:postgresql中拼接字符串
  8. Javascript特效:简单的匀速平移动画
  9. linux运维脚本编写,Linux运维基础技能: 脚本编程与Linux命令
  10. Java爬虫工程师技能列表