刷题第八天 字符串 双指针总结 KMP首学

KMP

前缀表是 以首字符开头的所有子串 最长相等前后缀数的集合

前缀表示以首字符开头 不包含最后字符的字串,比如

a没有前缀

ab的前缀是a

aba的前缀是a,ab

后缀表示以末字符结尾 不包含首字符的字串,比如

a没有后缀

ab的后缀是b

aba的后缀是a,ba

所以要计算一个字符串的前缀表,又称为next数组,要找到以首字符开头的所有字串,计算每个子串的最长相等前后缀的长度 然后整体组合起来就是字符串的前缀表

比如ABABAB

以首字符开头的所有字串,对应的前缀和后缀,以及最长的相等前后缀的长度分别是

A                        无                                             无                                             0

AB                     A                                                B                                             0

ABA                  A,AB                                           A,BA                                       1 (A)

ABAB               A,AB,ABA                                  B,AB,BAB                                2   (AB)

ABABA            A,AB,ABA,ABAB                        A,BA,ABA,BABA                      3  (ABA)

ABABAB         A,AB,ABA,ABAB,ABABA           B,AB,BAB,ABAB,BABAB         4  (ABAB)

所以ABABAB这个字符串的前缀表就是0,0,1,2,3,4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值