KMP算法
前言
KMP算法应该是我这些天来接解到的真正的算法题,今天视频和讲解文章看了两遍,算是对这个算法有了初步的认识,不得不佩服那些能研究出算法的学者们,想必他们的数学推理逻辑功底何其强大,才能从这具体的世界中抽象出那样像真理般的规律。
知识就像一张网,不是二维平面中的网,更像三维空间的网状结构。我们初步学习只是从一个点切入进去了,往往理解地不是很深刻。有些知识你觉得你已经掌握了,但放上几周或者几个月,再次学习时,会有更深刻的理解与感悟,这也就是有些题目,明明已经理解了,但是稍微换一下条件,你的思路又开始有点儿茫然了。
今天的试题,说实话,对于现在的我来说还是挺难的,那些公式我得拿着用例推导半天,主要还是积累的不够多,理解起来有点儿吃力。
KMP算法的理论知识可以看下B站卡哥的讲解,非常精彩。
后面我陆续更新一下我对KMP的理解
KMP的由来
KMP不是专业单词的缩写,而是三位学者名字的首字母,这三位学者分别是:Knuth,Morris和Pratt。
KMP作用
KMP主要是用来匹配字符串,提高效率。其主要思想就是当字符串匹配失败时,不需要从头开始重新匹配,而是从先前匹配成功过的字符开始匹配。
KMP算法中的核心就是前缀表。
前缀表
前缀表是用来回退匹配索引值的,它记录了当匹配失败时,模式串接下来应该从哪里开始重新匹配(用模式串匹配文本串)。
前缀表记录了下标索引i之前的字符串中有多大长度的相同前缀后缀。
待补充…
LeetCode 28. 实现 strStr()
题目链接:344. 反转字符串
文章讲解:代码随想录#344. 反转字符串
思路
重点还是得理解KMP算法,这道题二刷时补上。
LeetCode 459.重复的子字符串
题目链接:459.重复的子字符串
文章讲解:代码随想录#459.重复的子字符串
思路
这道题也一样,放到以后二刷时再做,现在不太会做,还没有完全吃透KMP算法。