• kmp算法中的next数组实例解释


    假设求串′ababaaababaa′的next数组

    模式串ababaaababaa
    下标 1 2 3 4 5 6 7 8 9 10 11 12

    1、前两位:next数组前两位一定是0,1 即前两位ab对应的next数组为01,则:

    模式串ababaaababaa
    下标 1 2 3 4 5 6 7 8 9 10 11 12
    next数组 0 1                    

    2、接下来看第三位,按照next数组求解方法。第三位a的前一位为第二位的b,b的next值为1对应内容为a,b与a不同,向前继续寻找next值对应的内容来与前一位进行比较。因为找到第一位都没有找到与前一位相等的内容,所以第三位a的next值为1,则:

    模式串ababaaababaa
    下标 1 2 3 4 5 6 7 8 9 10 11 12
    next数组 0 1 1                  

    3、接下来看第四位b,b的前一位a的next值1对应内容为a,相同,所以该位b的next值就是前一位a的next值加上1,即为2

    模式串ababaaababaa
    下标 1 2 3 4 5 6 7 8 9 10 11 12
    next数组 0 1 1 2                

    4、接下来看第五位a,a的前一位b的next值2对应内容为b,相等,所以该位a的next值就是前一位b的next值加上1,即为3

    模式串ababaaababaa
    下标 1 2 3 4 5 6 7 8 9 10 11 12
    next数组 0 1 1 2 3              

    5、接下来看第六位a,a的前一位a的next值3对应内容为a,相等,所以该位a的next值就是前一位a的next值加上1,即为4

    模式串ababaaababaa
    下标 1 2 3 4 5 6 7 8 9 10 11 12
    next数组 0 1 1 2 3 4            

    6、接下来看第七位a,a的前一位a的next值4对应内容为b,不相等,向前继续寻找next值对应的内容来与前一位进行比较,b的next值2对应的内容为b,依旧不相等,继续向前寻找,第二位b的next值1对应内容为a,相等。因为是在第二位b处实现的相等,所以第七位a的next值为第二位b的next值上加1,即为2

    模式串ababaaababaa
    下标 1 2 3 4 5 6 7 8 9 10 11 12
    next数组 0 1 1 2 3 4 2          

    7、接下来看第八位,同样道理,得出b的next值为2

    模式串ababaaababaa
    下标 1 2 3 4 5 6 7 8 9 10 11 12
    next数组 0 1 1 2 3 4 2 2        

    8、接下来看第九位,前一位b的next值2对应内容为b,相等,所以此处next值为3

    模式串ababaaababaa
    下标 1 2 3 4 5 6 7 8 9 10 11 12
    next数组 0 1 1 2 3 4 2 2 3      

    9、第十位同理可得,为4

    模式串ababaaababaa
    下标 1 2 3 4 5 6 7 8 9 10 11 12
    next数组 0 1 1 2 3 4 2 2 3 4    

    10、第十一位a的前一位b的next值4对应内容为b,相等,所以此处next值为5

    模式串ababaaababaa
    下标 1 2 3 4 5 6 7 8 9 10 11 12
    next数组 0 1 1 2 3 4 2 2 3 4 5  

    11、最后,第十二位同理可以得到next值位6

    模式串ababaaababaa
    下标 1 2 3 4 5 6 7 8 9 10 11 12
    next数组 0 1 1 2 3 4 2 2 3 4 5 6

    综上,串′ababaaababaa′的next数组为011234223456

  • 相关阅读:
    AtCoder Beginner Contest 199(Sponsored by Panasonic)
    牛客练习赛81
    Linux查看日志定位问题
    mysql慢查询诊断
    本地安装jenkins,github拉取Python代码,并执行python脚本
    Mac升级到big sur之后,根目录无法写入文件如何解决?
    mysql 查看当前事务
    MongonDb在thinkphp中常用的功能整理(模糊查询)
    PHP操作MongoDB之|增-删-改-查|
    将MySQL中数据导入到MongoDB中
  • 原文地址:https://www.cnblogs.com/lanqingzhou/p/8267879.html
Copyright © 2020-2023  润新知