复习过程中看到的一个简洁明了的求取部分匹配值的方法,比看图要好理解。
字串结构上的几个概念:
前缀:指除最后一个字符外,字符串的所有头部字串。
后缀:指除第一个字符外,字符串的所有尾部子串。
部分匹配值:为字符串的前缀和后缀的最长相等前后缀长度。
以
′
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数组.