next数组是KMP的核心,但对于next数组我们总是有时候感觉明白了,但有时候又感觉没明白,现在我就说下我自己对KMP中next数组的理解,首先next[i]上的数字的意义,next[i]表示的是当匹配到匹配串的第i个字母适配的时候,改跳到的位置,为什么要跳,是因为不想回到0重新浪费时间去比较,在深一点理解,我感觉next[i],里存的是 找两个相同的尽量长的字符串,一个是以从匹配串的第一个字母开始的,另一个是以失配字母i的前一个点结尾的,他俩可以有相交的地方,但不能完全相交,得到这两个串的最大长度后+1,就是next[i],通俗的理解就是假如 1231231234 当匹配到4的时候突然失配了,那么我们就找两个串,以个是以第一个开头,另一个是以4前面的那个3结尾,可以相交但不可以完全相交,得到的就是123123 123123,那么当4失配的时候就直接跳到第二个3后后面的那个1比较就行了,因为当前的这个失配点的前一个点为尾的串和以第一个点为起点的串的相等关系,我们可以有把握的直接跳,减少时间。总之next,KMP给我的感觉就是记忆化搜索,而记忆化搜索我有觉得是DP,所以KMP感觉也是dp吧。毕竟是每一步都不会去走多余的路。

next数组关于循环节几个小应用
(1)i - next[i] 最小循环节(第一个字母开始)
(2)next[i] 最大循环节中的第几位数(此时循环节可交叉)
(3)next[i] != 0 && i % (i - next[i]) == 0,当前是循环节中的最    后一位.
(4)在(3)的前提下 i / (i - next[i]) 表示的最大周期个数,也就是在最小循环节的前提下的最大周期个数。

KMP中next数组的理解相关推荐

  1. 1.numpy中三维数组的理解

    numpy中三维数组的理解 三维数组图形--立方体 图片中的三维数组 RNN中序列数据的三维数组 迭代数据中的三维数组 三维数组图形–立方体 我们在做图像处理,RNN序列数据,迭代数据的时候会遇到三维 ...

  2. KMP算法中next数组的理解与算法的实现(java语言)

    KMP 算法我们有写好的函数帮我们计算 Next 数组的值和 Nextval 数组的值,但是如果是考试,那就只能自己来手算这两个数组了,这里分享一下我的计算方法吧. 计算前缀 Next[i] 的值: ...

  3. CodeForces - 126B Password(KMP中next数组)

    题目链接:点击查看 题目大意:给出一个字符串s,要求在字符串中找出一个子字符串t,要求t在s中出现了至少三次,一次在前缀,一次在后缀,一次在中间 注意一下,这里的前缀不能包括最后一个字母,后缀不能包括 ...

  4. KMP 中next 数组的性质

    给一个字符串S, 求出所有前缀pre,使得这个前缀也正好是S的后缀. 输出所有前缀的结束位置 代码: int ans[maxn];int m = 0;ans[m++] = n; //自己本身就是一个最 ...

  5. 最长公共前后缀(KMP中next数组求法)

    字符串的前缀是指不包含最后一个字符的所有以第一个字符开头的连续子串:后缀是指不包含第一个字符的所有以最后一个字符结尾的连续子串.例如对于字符串 abacaba,其前缀有 a, ab, aba, aba ...

  6. CodeForces - 1137B Camp Schedule(KMP的next数组+构造)

    题目链接:点击查看 题目大意:给出一个主字符串s,再给出一个子字符串ss,主串和子串都是只由0或1所组成的字符串,现在要求重组主串s,要求重组后的字符串: 所包含的0与1的个数与之前保持一致 尽可能多 ...

  7. java 数组存入数据库_Java中关于二维数组的理解与使用

    今天练习的时候遇到一个题目,题目需求是这样的: 需求说明: 根据3个班各5名学生某门课程的成绩,正确使用二维数组计算如图所示3个班各自的总成绩 分析: 要实现这个功能需要存储两个信息: 一个是班级信息 ...

  8. java不等长二维数组_Java中关于二维数组的理解与使用

    今天练习的时候遇到一个题目,题目需求是这样的: 需求说明: 根据3个班各5名学生某门课程的成绩,正确使用二维数组计算如图所示3个班各自的总成绩 分析: 要实现这个功能需要存储两个信息: 一个是班级信息 ...

  9. 关于Numpy数组中属性shape的理解

    关于Numpy数组中属性shape的理解 概述:numpy数组都有着shape这一属性,怎么理解这一属性呢?看以下代码: # 关于numpy中shape参数的深刻理解 p1 = np.array([1 ...

最新文章

  1. FTP 服务搭建及常用的命令脚本及传输协议基础普及
  2. GridView添加自动编号列
  3. 常用的函数式接口_Function接口练习_自定义函数模型拼接
  4. 【RK3399Pro学习笔记】十二、ROS参数的使用与编程方法
  5. 兼容IE和FF:获取Referer的JS和PHP方法 及 PHP利用curl伪造IP和来路
  6. 转--linux开启FrameBuffer
  7. wxwindows编译
  8. ubuntu 18.04安装pycharm及编译环境配置
  9. kafka消费者报错:Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
  10. 世界电影经典《第七封印》
  11. 年轻人逃离一线城市:外地人生存环境愈发严峻
  12. js+html+css+jQuery实现简单购物车
  13. 四棱锥和三棱锥重叠求面数
  14. MySQL 排序语句
  15. DOSBOX运行程序
  16. 【OpenCV】IPCamera读取网络摄像头实时画面
  17. 总结了11句话,送给通信新员工
  18. python爱好者社区公众号历史文章合集_精心整理 |人工智能爱好者社区历史文章合集(作者篇)...
  19. 基于java+springmvc+mybatis+vue+mysql的网络视频播放器
  20. Laya Shader消融特效

热门文章

  1. Facebook推开源软件平台ParlAI,能否解决机器人灵魂缺失问题?
  2. MapReduce程序的运行全貌
  3. Hacking with Angular: 玩转ngOptions指令
  4. IP地址分类及子网掩码详解
  5. Bazel发布Beta版本,增加对Groovy、Rust和Scala语言的支持
  6. 【转】mysql 分析查找执行效率慢的SQL语句
  7. b站编程课程资源汇总
  8. Python divmod方法
  9. ViewPager (下)-- 利用 Fragment 实现美丽的 页面切换
  10. JLINK通过SW模式下载程序的方法