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

结论
通过NEXT数组,可以得到字符串的最小循环节。
设字符串s的结尾下标为i,NEXT[i]=j,如果{j0i%(ij)==0成立,那么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]就是字符串的循环节。
由于NEXT数组的性质,s[j+1,i]也是字符串的最小循环节,因为如果有更小的循环节,NEXT[i]的值也会变大,直到不存在更小的循环节。

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

posted @   fxq1304  阅读(203)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥
点击右上角即可分享
微信分享提示