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数组.

你可能感兴趣的:(数据结构)