给你一个字符串,它是由某个字符串不断自我连接形成的。
但是这个字符串是不确定的,现在只想知道它的最短长度是多少。
输入格式
第一行给出字符串的长度 LL,第二行给出一个字符串,全由小写字母组成。
输出格式
输出最短的长度。
数据范围
1≤L≤1061≤L≤106
输入样例:
8
cabcabca
输出样例:
3
样例解释
对于样例,我们可以利用 abc
不断自我连接得到 abcabcabc
,读入的 cabcabca
是它的子串。
//
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+7;
int abfix[N];
void init( const string &p )
{
int i,j;
abfix[0]=abfix[1]=0;
for( i=1;i<p.size();i++ )
{
j=abfix[i];
while( j && p[j]!=p[i] ) j=abfix[j];
if( p[j]==p[i] ) abfix[i+1]=j+1;
else abfix[i+1]=0;
}
}
int main()
{
string p;
int n;
while( cin>>n>>p )
{
init(p);
cout<<n-abfix[n]<<endl;
}
return 0;
}