补充 kmp算法

  1. kmp算法是基最长的前后缀和
  2. 我们把模式串和查找串放在一起,如果他们前后缀长度等于模式串,说明我们找到对应的位置
  3. 假设现在遍历到第i 个节点,前一个节点的前后缀长度是p[i-1]
  4. 如果s[i]==s[p[i-1]] 说明可以延续之前的最长p[i]=p[i-1]+1
  5. 如果不等于,我们可以以前一个节点结尾的第二个最长的前后缀长度,也就是 p[p[i-1]-1]
  6. 因为可以确定的是 s[0:p[i-1]-1]的长度是之前相等的前缀,我们想找的第二长的前后缀长度就是字符串s[0:p[i-1]-1]的最长前后缀长度
  7. 注意这里字符串的表示方法两边都能取到
  8. 不断循环找到最长的前后缀长度

我们找的前后缀长度不包括自身,也就是一个字母的最长前后缀长度是 0

  • 这样我们初始比较可以和第一个进行比较(也就是索引 0 的节点 此时p[i-1]=0)
全部评论

相关推荐

嵌入式的小白:简历关键的就是项目经历,你这密密麻麻的,我一点开就不想看了,每一条都不换行,而且每一个里面写那么多,需要精简一下,这样别人看一眼就能知道你做了啥,用了啥技术
点赞 评论 收藏
分享
包行:平时怎么刷算法题的哇,字节的手撕听说都很难
字节跳动工作体验
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务