模式匹配(字符串子串查找)KMP算法

本文详细介绍了KMP算法,包括如何求取最长前后缀长度和部分匹配值,以及KMP算法在字符串子串查找中的应用。通过实例解释了PM值的作用,指出KMP算法相比于暴力匹配的时间复杂度优势。还探讨了KMP算法的变形与优化,如next数组的计算和优化策略,以提高匹配效率。

求取最长前后缀长度和部分匹配值

模式串: acacaca 长度:7
求模式串PM(部分匹配),先求最长前后缀长度

前后缀交集 最长前后缀长度
a 0
ac 0
aca a 1
acac a ac 2
acaca a aca 3
acacac ac acac 4
acacaca a aca acaca 5

不妨设:串位序从1开始,于是有下表

j 1 2 3 4 5 6 7
P a c a c a c a
PM 0 0 1 2 3 4 5

Q1:PM传达了什么信息呢?例如PM[5]=3
A1:反映了模式分别从头和从第5个字符,往后/前数3个字符,得到的两个部分重合,多1个就不重合

j 1 2 3 4 5
P a c a c a
从前往后 a c a
从后往前 a c a

暴力匹配和KMP匹配

Q2:PM怎什么用呢?下面举例说明,不妨设:

i 1 2 3 4 5 6 7 8 9 10 11
主串S c a c a c a a c a b c
模式P a c a c a c a
j 1 2 3 4 5 6 7

某一趟,j=6时不匹配,即S[7]≠P[6]
这意味着:
主串有字符序列与模式串前5个字符组成的部分相同,即acaca(下面简称“部分模式”)
②这一部分第6个和模式第6个字符不相同即c、a
下一趟

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值