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

相关推荐

珩珺:那些经历都太大太空了,实习的情况不了解,大创项目连名字、背景、目的及意义都没体现出来;地摊经济更是看完连卖的什么产品都不知道,项目成果直接写营收多少都更直观真实一点;后面那个校文体部的更是工作内容是组织活动整理流程,成果变成了当志愿者,而且你们学校本科学生会大一入学就直接当部长吗,志愿里面还提到了疫情防控,全面解封是22年12月的事情,可能时间上也有冲突。可能你花了钱人家就用AI给你随便写了点内容改了一下,没什么体现个性化的点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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