Description
给你一个字符串,它是由某个字符串不断自我连接形成的。 但是这个字符串是不确定的,现在只想知道它的最短长度是多少.
Input
第一行给出字符串的长度,1 < L ≤ 1,000,000. 第二行给出一个字符串,全由小写字母组成.
Output
输出最短的长度
Sample Input
8
cabcabca
Sample Output
3
HINT
最小循环串(kmp)模板
#include<bits/stdc++.h>
using namespace std;
#define rep(i,j,k) for(int i = j;i <= k;++i)
#define repp(i,j,k) for(int i = j;i >= k;--i)
#define rept(i,x) for(int i = linkk[x];i;i = e[i].n)
#define P pair<int,int>
#define Pil pair<int,ll>
#define Pli pair<ll,int>
#define Pll pair<ll,ll>
#define pb push_back
#define pc putchar
#define ll long long
int n;
int Next[1001000];
char s[1001000];
int read()
{
int sum = 0;char c = getchar();bool flag = true;
while( c < '0' || c > '9' ) {if(c == '-') flag = false;c = getchar();}
while( c >= '0' && c <= '9' ) sum = sum * 10 + c - 48 , c = getchar();
if(!flag) sum = -sum;
return sum;
}
int main()
{
n = read();
scanf("%s",s+1);
int j = 0;
rep(i,2,n)
{
while(j && s[j+1] != s[i]) j = Next[j];
if(s[i] == s[j+1]) j++;
Next[i] = j;
}
printf("%d\n",n-Next[n]);
return 0;
}
本文介绍了一种使用KMP算法求解给定字符串最短周期的方法。通过输入字符串的长度及具体形式,该算法能够高效地计算出构成该字符串的基础周期的最短长度。
488

被折叠的 条评论
为什么被折叠?



