返回文章归档

KMP算法实现串的模式匹配

本页目录5 个章节

随便记点对KMP的也许是思考的东西,关于逻辑和代码实现。

KMP算法

由于暴力匹配很浪浪浪费所以得继续优化。

前缀、后缀和部分匹配值

这三个是子串的结构

  • 前缀:除了最后一个字符外,字符串的所有的头部子串

  • 后缀:除了第一个字符外,字符串所有的尾部子串

  • 部分匹配值:字符串的前缀和后缀的最长相等前后缀长度(这个看定义好像不是很明白)。最长的相等的前缀和后缀的长度

算法原理

问题

s为被匹配的字符串,p为要求的字符串模式。当p有j为和s已经匹配了,当j+1位不匹配了,该怎么移动p进行下一步的匹配?即next[j+1]该是多少?

思路

已知前j位是匹配的,所以去寻找q[1]至q[j]的前缀和后缀相等的子串。如果前缀和后缀是相等的,那么挪动这个前后缀的长度就可以经行继续匹配。当这个前后缀的值该是多少?我们优先考虑部分匹配值,应为这个东西是最长的,第一眼看上去是效率是最高的,毕竟挪动越多再次需要匹配的越少。但真的是吗?

假设已知next[j]=k,此时next[j+1]=?存在两种情况:

LEAVE A LITTLE NOTE

聊聊这篇记录

匿名也可以留言。昵称、邮箱和网址均为选填,邮箱不会公开。评论审核后显示。

搜索文章

输入关键词,寻找一段记忆。

Tab 切换结果 · Enter 打开 · Esc 关闭