KMP算法求取部分匹配值的方法

复习过程中看到的一个简洁明了的求取部分匹配值的方法,比看图要好理解。

字串结构上的几个概念:
前缀:指除最后一个字符外,字符串的所有头部字串。
后缀:指除第一个字符外,字符串的所有尾部子串。
部分匹配值:为字符串的前缀和后缀的最长相等前后缀长度。

′ a b a b a ′ 'ababa' ababa为例:
′ a ′ 的 前 缀 和 后 缀 都 为 ∅ , 最 长 相 等 前 后 缀 长 度 为 0 'a'的前缀和后缀都为\varnothing,最长相等前后缀长度为0 a,0
′ a b ′ 的 前 缀 为 { a } , 后 缀 为 { b } , { a } ∩ { b } = ∅ , 最 长 相 等 前 后 缀 长 度 为 0 'ab'的前缀为\{a\},后缀为\{b\},\{a\}\cap\{b\}=\varnothing,最长相等前后缀长度为0 ab{a},{b},{a}{b}=,0
′ a b a ′ 的 前 缀 为 { a , a b } , 后 缀 为 { a , b a } , { a , a b } ∩ { a , b a } = { a } , 最 长 相 等 前 后 缀 长 度 为 1 'aba'的前缀为\{a,ab\},后缀为\{a,ba\},\{a,ab\}\cap\{a,ba\}=\{a\},最长相等前后缀长度为1 aba{a,ab},{a,ba},{a,ab}{a,ba}={a},1
′ a b a b ′ 的 前 缀 为 { a , a b , a b a } ∩ 后 缀 { b , a b , b a b } = { a b } , 最 长 相 等 前 后 缀 长 度 为 2 'abab'的前缀为\{a,ab,aba\}\cap后缀\{b,ab,bab\}=\{ab\},最长相等前后缀长度为2 abab{a,ab,aba}{b,ab,bab}={ab},2
′ a b a b a ′ 的 前 缀 { a , a b , a b a , a b a b } ∩ 后 缀 { a , b a , a b a , b a b a } = { a , a b a } , 公 共 元 素 有 两 个 , 最 长 相 等 前 后 缀 长 度 为 3 'ababa'的前缀\{a,ab,aba,abab\}\cap后缀\{a,ba,aba,baba\}=\{a,aba\},公共元素有两个,最长相等前后缀长度为3 ababa{a,ab,aba,abab}{a,ba,aba,baba}={a,aba},,3

综上,字符串 ′ a b a b a ′ 'ababa' ababa的部分匹配值为00123

部分匹配值的作用:将部分匹配值写成数组形式后可以得到next数组.

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值