重复子串(kmp 算法)

重复子串

解题思路

这题要处理出next数组(前i个字符中,最长相同前缀后缀)
len为字符串s的长度
就是字符串第一位到next[len]位len-next[len]位到第len位匹配
所以len%(len-next[len])为0
存在重复连续子串
长度len-next[len]
循环次数len/(len-next[len])
否则为1

AC代码

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char s[1000005];
int len,next[1000005];
int main()
{
   
	scanf("%s",s+1);
	while(s[1]!='.')//多组数据
	{
   
		len=strlen(s+1);//长度
		next[0]=0;//初值
		for(int i=2,k=0;i<=len;i++)//求next数组
		{
   
			while(k&&s[i]!=s[k+1]) k=next[k];//不等
			if(s[i]==s[k+1]) k++;//相等
			next[i]=k;//赋值
		}
		if(len%(len-next[len])==0)printf("%d\n",len/(len-next[len]));//判断
		else printf("1\n");
		scanf("%s",s+1);
	}
	return 0;
}

谢谢

全部评论

相关推荐

05-12 17:00
门头沟学院 Java
king122:你的项目描述至少要分点呀,要实习的话,你的描述可以使用什么技术,实现了什么难点,达成了哪些数字指标,这个数字指标尽量是真实的,这样面试应该会多很多,就这样自己包装一下,包装不好可以找我,我有几个大厂最近做过的实习项目也可以包装一下
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 12:04
毕业生招你惹你了,问一个发薪日来一句别看网上乱七八糟的你看哪个工作没有固定发薪日扭头就取消了面试就问了一句公司都是这个态度吗还搞上人身攻击了...
程序员小白条:呃呃呃,都还没面试,我都不会问这么细,何况通不通过,去不去都另说,你没实力和学历的话,在外面就这样,说实话没直接已读不回就不错了,浪费时间基本上
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务