补充 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)
全部评论

相关推荐

废铁汽车人:秋招真是牛鬼蛇神齐聚一堂
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务