原题传送门

kmp匹配

推导发现:

设循环节的长度为x,那么kmp数组前x个都是0,后面kmp[x+n]=n

先求出kmp数组

答案实际就是len-kmp[len]

#include <bits/stdc++.h>
#define N 1000005
using namespace std;
char a[N];
int kmp[N];
int main()
{
	int n;
	scanf("%d%s",&n,a);
	kmp[0]=kmp[1]=0;
	for(register int i=1,k=0;i<n;++i)
	{
		while(k&&a[i]!=a[k])
			k=kmp[k];
		kmp[i+1]=a[i]==a[k]?++k:0;
	}
	printf("%d",n-kmp[n]);
	return 0;
}

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-25
  • 2022-12-23
  • 2021-10-27
  • 2021-12-05
  • 2021-10-07
  • 2021-04-01
猜你喜欢
  • 2021-10-18
  • 2021-11-07
  • 2021-11-29
  • 2022-12-23
  • 2021-07-11
  • 2021-11-19
  • 2022-12-23
相关资源
相似解决方案