KMP算法 学习笔记
学习知乎大牛 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算法 学习笔记相关推荐
- 数据结构与算法 学习笔记(5):字符串
数据结构与算法 学习笔记(5)- 字符串 本次笔记记录了LeetCode中关于字符串的一些问题,并给出了相应的思路说明和代码.题目编号与LeetCode对应,方便查找. 题目1:LeetCode 13 ...
- 大顶堆删除最大值_算法学习笔记(47): 二叉堆
堆(Heap)是一类数据结构,它们拥有树状结构,且能够保证父节点比子节点大(或小).当根节点保存堆中最大值时,称为大根堆:反之,则称为小根堆. 二叉堆(Binary Heap)是最简单.常用的堆,是一 ...
- Manacher算法学习笔记 | LeetCode#5
Manacher算法学习笔记 DECLARATION 引用来源:https://www.cnblogs.com/grandyang/p/4475985.html CONTENT 用途:寻找一个字符串的 ...
- 数据结构与算法学习笔记之 从0编号的数组
数据结构与算法学习笔记之 从0编号的数组 前言 数组看似简单,但掌握精髓的却没有多少:他既是编程语言中的数据类型,又是最基础的数据结构: 一个小问题: 为什么数据要从0开始编号,而不是 从1开始呢? ...
- 输出dag的所有拓扑排序序列_算法学习笔记(53): 拓扑排序
拓扑排序是对DAG(有向无环图)上的节点进行排序,使得对于每一条有向边 , 都在 之前出现.简单地说,是在不破坏节点 先后顺序的前提下,把DAG拉成一条链.如果以游戏中的科技树(虽然名字带树,其实常常 ...
- 算法学习笔记:对指定金额计算最少钞票数
算法学习笔记:对指定金额计算最少钞票数 一.引出问题 财务人员给员工发工资时经常遇到这样一个问题,即根据每个人的工资额(以元作为单位)计算出各种面值的钞票的张数,且要求总张数最少.例如,某职工工资为3 ...
- matlab中x从0到5不含0,关于MATLAB的数学建模算法学习笔记
关于MATLAB的数学建模算法学习笔记 目录 线性规划中应用: (3) 非线性规划: (3) 指派问题;投资问题:(0-1问题) (3) 1)应用fmincon命令语句 (3) 2)应用指令函数:bi ...
- 机器学习篇01:在线学习的支持向量机算法学习笔记
在线学习的支持向量机算法学习笔记 oisvm算法实现说明 oisvm算法实现说明 % 本程序是用于实现基于在线学习的调制信号识别的程序 % % % 第一步:调制信号的生成 % 首先是7个信号:2ASK ...
- 数据结构与算法学习笔记之 提高读取性能的链表(上)
数据结构与算法学习笔记之 提高读取性能的链表(上) 前言 链表(Linked list)比数组稍微复杂一点,在我们生活中用到最常见的应该是缓存,它是一种提高数据读取性能的技术,常见的如cpu缓存,浏览 ...
- l2-004 这是二叉搜索树吗?_算法学习笔记(45): 二叉搜索树
二叉搜索树(Binary Search Tree, BST)是一种常用的数据结构,在理想情况下,它可以以 的复杂度完成一系列修改和查询,包括: 插入一个数 删除一个数 查询某数的排名(排名定义为比该数 ...
最新文章
- spring知识概要
- 王道操作系统考研笔记——2.1.9 调度算法
- 洛谷P2023 [AHOI2009]维护序列
- Visual Studio自动生成XML类和JSON类
- OLED12864 液晶屏
- 善用佳软推荐几个很好用的软件以备使用
- 求小于100的所有合数 python_python100例
- 黑马程序员-学习日志-文件的合并
- 简约至上(交互设计四策略)
- 雷军若愿“赌”服输给董明珠10亿元 他的身家还会剩下多少?
- mysql 导入unl文件_informix数据库及数据导入导出
- 无憾,2019!加油,2020!
- 研究生“计算机通信新技术”课程复习题(2016年)
- nodejs01——安装及使用、服务端及客户端、commonjs规范、fs模块的使用(文件操作及目录操作)、stream、buffer、WebServer、端口、动态资源及静态资源、头信息、请求方式
- 在同一个二维坐标系绘制出一元二次曲线, sin正弦、cos余弦曲线 (numpy,matplotlib.pyplot )
- 华为云 IoT 物联网数据分析能力详解
- php和c#短信接口,C#代码示例_短信接口 | 微米-中国领先的短信彩信接口平台服务商...
- 研招考试科目计算机专业课408代表什么?
- 阿里云分析型数据库MySQL版(AnalyticDB)测试初体验
- 洛谷 P2258 子矩阵
热门文章
- HashMap 的底层源码分析
- dategridview代码选中行_使用IntelliJ IDEA进行Java代码调试的技巧
- html5 游戏 算法,JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
- linux 显存占用内存,Linux服务器内存、CPU、显卡、硬盘使用情况查看
- eclipse java machine_打开Eclipse弹出“No java virtual machine was found...的解决方法
- mybatis插入时间_深入分析MyBatis源码
- SQL:postgresql中拼接字符串
- Javascript特效:简单的匀速平移动画
- linux运维脚本编写,Linux运维基础技能: 脚本编程与Linux命令
- Java爬虫工程师技能列表