随便记点对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
聊聊这篇记录
匿名也可以留言。昵称、邮箱和网址均为选填,邮箱不会公开。评论审核后显示。
评论将在靠近时加载。