博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
无线传输
阅读量:5069 次
发布时间:2019-06-12

本文共 753 字,大约阅读时间需要 2 分钟。

题目描述

给你一个字符串,它是由某个字符串不断自我连接形成的。 但是这个字符串是不确定的,现在只想知道它的最短长度是多少.

输入格式

第一行给出字符串的长度,1 < L ≤ 1,000,000.

第二行给出一个字符串,全由小写字母组成.

输出格式

输出最短的长度

输入输出样例

输入 #1复制
8cabcabca
输出 #1复制
3

说明/提示

对于样例,我们可以利用"abc"不断自我连接得到"abcabcabc",读入的cabcabca,是它的子串

 

 

这道题求的是字符串ss最小长度的循环,我们称之为“ss的循环子串”

 

引入结论:

 

ans=n-next[n]

 

求出字符串的最大公共前后缀;

 

程序很短,但浓缩的都是精华(毕竟是KMP)

 

#include
#include
#include
using namespace std;#define Q 1000005char a[Q];int p[Q];int s,i,j;int main(){ scanf("%d",&s); scanf("%s",a+1); for(i=2;i<=s;i++){ while(j&&a[j+1]!=a[i]){ j=p[j]; } if(a[j+1]==a[i]){ j++; } p[i]=j; } printf("%d",s-p[s]);}

 

转载于:https://www.cnblogs.com/hrj1/p/11134721.html

你可能感兴趣的文章
《梦断代码》读书笔记(三)
查看>>
Java8 Lambda表达应用 -- 单线程游戏server+异步数据库操作
查看>>
AngularJS学习篇(一)
查看>>
关于Xshell无法连接centos6.4的问题
查看>>
css3动画——基本准则
查看>>
输入月份和日期,得出是今年第几天
查看>>
pig自定义UDF
查看>>
spring security 11种过滤器介绍
查看>>
代码实现导航栏分割线
查看>>
大数据学习系列(8)-- WordCount+Block+Split+Shuffle+Map+Reduce技术详解
查看>>
【AS3代码】播放FLV视频流的三步骤!
查看>>
枚举的使用
查看>>
luogu4849 寻找宝藏 (cdq分治+dp)
查看>>
日志框架--(一)基础篇
查看>>
关于源程序到可运行程序的过程
查看>>
转载:mysql数据库密码忘记找回方法
查看>>
scratch少儿编程第一季——06、人在江湖混,没有背景怎么行。
查看>>
C# Async与Await的使用
查看>>
Mysql性能调优
查看>>
iOS基础-UIKit框架-多控制器管理-实例:qq界面框架
查看>>