YbtOJ KMP算法课堂过关 例2 重复字串【KMP】

在这里插入图片描述


思路

安利博客嗯嗯——TJH的博客

代码

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int next[1000010],longs;
char s[1000100];
int main()
{
    
    
	scanf("%s",s+1);
	longs=strlen(s+1);
	while(s[1]!='.')
	 {
    
    
	 	int k=0;
	 	for(int i=2; i<=longs; i++)
	 	 {
    
    
	 	 	while(k>0&&s[k+1]!=s[i])
	 	 	  k=next[k];
	 	 	if(s[k+1]==s[i])
	 	 	  k++;
	 	 	next[i]=k;
		 }
		if(longs%(longs-(next[longs]))==0)
		  printf("%d\n",longs/(longs-(next[longs])));
		else
		  printf("1\n");
	 	scanf("%s",s+1);
	 	longs=strlen(s+1);
	 }
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Jackma_mayichao/article/details/115015994