题目
题目描述
给你一个字符串,它是由某个字符串不断自我连接形成的。但是这个字符串是不确定的,现在只想知道它的最短长度是多少。
输入格式
第一行给出字符串的长度 L,第二行给出一个字符串,全由小写字母组成。
输出格式
输出最短的长度。
样例
输入
8
cabcabca
输出
3
代码详解
大致思路
n-p[n]就是周期长度
直接输出就好
ACcode
#include<bits/stdc++.h>
using namespace std;
const int N=1e7;
char a[N];
int p[N];
int n,l;
void pre(){p[1]=0;int j=0;for(int i=1;i<n;i++){while(j>0&&a[j+1]!=a[i+1]){j=p[j];}if(a[j+1]==a[i+1]){j++;}p[i+1]=j;}
}
int main()
{cin>>l;cin>>a+1;n=strlen(a+1);pre();printf("%d\n",n-p[n]);return 0;
}