首先看看next数组值的求解方法例如:
模式串 a b a a b c a c
next值 0 1 1 2 2 3 1 2
      
      
next数组的求解方法是:第一位的next值为0,第二位的next值为1,后面求解每一位的next值时,根据前一位进行比较。首先将前一位与其
next值对应的内容进行比较,如果相等,则该位的next值就是前一位的next值加上1;如果不等,向前继续寻找next值对应的内容来与前一位进行
比较,直到找到某个位上内容的next值对应的内容与前一位相等为止,则这个位对应的值加上1即为需求的next值;如果找到第一位都没有找到与前一位相
等的内容,那么需求的位上的next值即为1。
       看起来很令人费解,利用上面的例子具体运算一遍。
       1.前两位必定为0和1。
       2.计算第三位的时候,看第二位b的next值,为1,则把b和1对应的a进行比较,不同,则第三位a的next的值为1,因为一直比到最前一位,都没有发生比较相同的现象。
       3.计算第四位的时候,看第三位a的next值,为1,则把a和1对应的a进行比较,相同,则第四位a的next的值为第三位a的next值加上1。为2。因为是在第三位实现了其next值对应的值与第三位的值相同。
      
4.计算第五位的时候,看第四位a的next值,为2,则把a和2对应的b进行比较,不同,则再将b对应的next值1对应的a与第四位的a进行比较,相
同,则第五位的next值为第二位b的next值加上1,为2。因为是在第二位实现了其next值对应的值与第四位的值相同。
       5.计算第六位的时候,看第五位b的next值,为2,则把b和2对应的b进行比较,相同,则第六位c的next值为第五位b的next值加上1,为3,因为是在第五位实现了其next值对应的值与第五位相同。
       6.计算第七位的时候,看第六位c的next值,为3,则把c和3对应的a进行比较,不同,则再把第3位a的next值1对应的a与第六位c比较,仍然不同,则第七位的next值为1。
       7.计算第八位的时候,看第七位a的next值,为1,则把a和1对应的a进行比较,相同,则第八位c的next值为第七位a的next值加上1,为2,因为是在第七位和实现了其next值对应的值与第七位相同。

最新文章

  1. Dom探索之基础详解
  2. git将本地仓库推送到远程仓库
  3. openssl evp 对称加密(AES_ecb,ccb)
  4. yii2 如何用命名空间方式使用第三方类库
  5. C#关于控件的上下左右移动
  6. 数据仓库专题(23):总线矩阵的另类应用-Drill Down into a More Detailed Bus Matrix
  7. java基础之类与继承 详解
  8. android 数据库的增删改查的另一种方式
  9. TOP30专访:捕鱼达人陈昊芝
  10. ios 第三方qq授权登陆,第一次登陆后,再次登陆,失效
  11. js获取指定时间的前几秒
  12. (办公)git入门
  13. .NET快速信息化系统开发框架 V3.2 -> Web 用户管理模块编辑界面-组织机构选择支持级联选择
  14. linux ls统计文件个数
  15. 使用xmanager图形化远程连接rhel6
  16. Python数据类型补充1
  17. 20190104xlVBA_在课表里标记自己的课程
  18. MikroTik RouterOS虚拟机/实体机安装方法
  19. swift的enum基础
  20. PHP 的“魔术常量”

热门文章

  1. Java反射 - 2(对象复制,父类域,内省)
  2. 快速幂:quickpow
  3. 你好,C++(21)只要天还没黑,就一直在工地干活-4.3.1 while循环:只要…就一直…
  4. Java语言实现简单FTP软件------>FTP软件本地窗口的实现(五)
  5. CC Arithmetic Progressions (FFT + 分块处理)
  6. OnCreate
  7. [资料] Apache2 的 httpd.conf 经典中文翻译
  8. swift代码排版-参考
  9. Android 获取网络链接类型
  10. OSSEC配置