• NEXT数组与字符串最小循环节


    结论
    通过NEXT数组,可以得到字符串的最小循环节。
    设字符串s的结尾下标为i,NEXT[i]=j,如果(left{egin{aligned}j e0\i\%(i-j)==0end{aligned} ight.)成立,那么s[j+1,i]就是字符串的最小循环节。

    简要说明
    ————————
    1      x  j
      ————————
      y        i

    设s[x,j]=s[j,i]
    由于s[1,j]=s[y,i],并且
    s[1,j]=s[1,x]+s[x,j]
    s[y,i]=s[y,j]+s[j,i]
    所以s[1,x]=s[y,j]

    ——————
    1      x
      ——————
      y      j
    和之前的情况相同。
    所以如果字符串是由重复的s[j+1,i]组成的,那么s[j+1,i]就是字符串的循环节。
    由于NETX数组的性质,s[j+1,i]也是字符串的最小循环节,因为如果有更小的循环节,NEXT[i]的值也会变大,直到不存在更小的循环节。

    相关题目
    hdu1358 Period
    求每个前缀串的最大周期。
    hdu3746 Cyclic Nacklace
    最少在字符串头尾添加几个字符,使得从开头到某个位置和从某个位置到结尾的两段字符相同,并且两段字符无重叠部分。

  • 相关阅读:
    使用rem,动态设置root font size
    手机陀螺仪
    获取图片
    插件整理
    jquery图片懒加载
    关于underscore.js
    PCA
    Endnote9
    实验问题记录
    DN/TOA/SR
  • 原文地址:https://www.cnblogs.com/fxq1304/p/13222374.html
Copyright © 2020-2023  润新知