LA 3026 && POJ 1961 Period (利用kmp中的next数组找最大的循环节 )

578 篇文章 ¥299.90 ¥399.90
570 篇文章 ¥299.90 ¥399.90
该博客主要介绍了如何求解字符串的最短循环节问题,针对LA 3026和POJ 1961这两道编程题目,提出了利用KMP算法中的next数组来寻找最大循环节的方法。通过分析字符串的后缀函数,当i-f[i]=ki (k>1)时,可以确定存在循环节,并给出相应的i和k值。博客中提供了问题的输入输出格式和解题思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

周期( Period, SEERC 2004, LA3026
给定一个长度为n的字符串S, 求它每个前缀的最短循环节。 换句话
说, 对于每个i( 2≤i≤n) , 求一个最大的整数K>1( 如果K存在) , 使得
S的前i个字符组成的前缀是某个字符串重复K次得到。 输出所有存在K的i
和对应的K。
比如对于字符串aabaabaabaab, 只有当i=2, 6, 9, 12时K存在, 且
分别为2, 2, 3, 4。
【 输入格式】
输入包含多组数据。 每组数据第一行为正整数n( 2≤n≤106) , 第二行
为一个字符串S。 输入结束标志为n=0。
【 输出格式】
对于每组数据, 按照从小到大的顺序输出每个i和对应的K, 一对整
数占一行。
【 分析】

 

如图3-22所示, 根据后缀函数的定义, “错位部分”长度为i-f[i]。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值