题目描述
给你一个字符串 s1,它是由某个字符串 s2 不断自我连接形成的(保证至少重复 2 次)。但是字符串 s2 是不确定的,现在只想知道它的最短长度是多少。
输入格式
第一行一个整数 L,表示给出字符串的长度。
第二行给出字符串 s1 的一个子串,全由小写字母组成。
输出格式
仅一行,表示 s2 的最短长度。
输入输出样例
输入 #1复制
8
cabcabca
输出 #1复制
3
说明/提示
样例输入输出 1 解释
对于样例,我们可以利用 abc 不断自我连接得到 abcabcabcabc,读入的 cabcabca,是它的子串。
规模与约定
对于全部的测试点,保证 1≤L≤106。
代码实现:
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int main()
{
int n;
cin>>n;
string s,s1;
cin>>s;
int m=s.length();
s1=s;
int count=0;
for(int i=0;i<m;i++)
{
if(s1.substr(i+1,m-1-i)==s.substr(0,m-1-i)) //从i+1开始长度为m-1-i;从0开始长度为m-1-i;
{ count=i+1;
break;
}
}
cout<<count;
return 0;
}