【KMP】Radio Transmission

题目描述

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

输入

第一行给出字符串的长度,1 < L ≤ 1,000,000. 第二行给出一个字符串,全由小写字母组成.

输出

请输出最短的长度

样例输入

8
cabcabca

样例输出

3

题解

#include<iostream>
#include<cstring>
using namespace std;
int n,q[1000005];
char a[1000005];
int main()
{
	cin>>n;
	scanf("%s",a+1);
	int j=0;
	q[1]=0;
	for(int i=2;i<=n;i++)
	{
		while(j&&a[i]!=a[j+1])
			j=q[j];
		if(a[i]==a[j+1])
			j++;
		q[i]=j;
	}
	cout<<n-q[n]<<endl;
	return 0;
}

 

上一篇:P4391 [BOI2009]Radio Transmission 无线传输


下一篇:洛谷P4391 [BOI2009]Radio Transmission 无线传输