C++练习——最小重复子串

举报
Code_流苏 发表于 2022/04/20 19:16:45 2022/04/20
【摘要】 C++练习——最小重复子串

名人说:故立志者,为学之心也;为学者,立志之事也。—— 王阳明

一、问题呈现

1.问题描述

Problem Description

“轰”一声巨响,惊醒了沉睡中的Floyd Warshall市

sxy在中心大楼,透过24k黄金玻璃窗,凝视着一片惨白的西方,巨响就是从那里传来的

“报告!—”

"嗯?什么事?“ sxy放下手中的一沓资料,向面前的黑衣人询问道

“报告首领,我们已经成功截获到那边传来的非正常的,正弦波信号!”

“什么,正弦波信号!!”sxy飞身而起,“看来错不了了,果然是那东西,错乱的线性空间内泄露来的正弦波信号,那就是通往线性世界的时空隧道,竟然跑到OI的世界里来了!把截获到的信号发给我!”

”是!“黑衣人转身离去

不久,信号就被送到sxy的办公桌上

嗯,我们需要对截获到的信号进行傅里叶分析,以期望能够得到时空隧道那边的信息。但为了便于分析,我们最好先找到信号重复最小单位,因为信号就是以这样的最小单位为单位地重复,因此我们只需要分析这一段信号的最小重复单位,就能知道这段信号表达的意思了(因为整个信号都是按这个单位重复的)。于是sxy找到了你,他相信你一定能解决这个问题的。

2.输入输出

Input

第一行,一个整数N,表示截获到的信号的长度
第二行一个长度为N的字符串,表示这个信号

Output

这个信号的最小重复单位的长度

3.测试样例

样例1

Sample Input

6
233233

Sample Output

3

样例2

Sample Input

8
12312341

Sample Output

8

补充解释:

233233这个字符串的最小重复单位为233,其长度为3
12312341这个字符串最小重复单位是他自己,长度为8

数据范围与提示:1<=N<=1000

二、源码实现

#include<iostream>
#include<cstring>
using namespace std;

int main(){
	int N;
	cin>>N;
	string str;
	cin>>str;
	for(int i=1;i<=N;i++)
	{
		if(N%i==0)
		{
			int flag = 0; //标记为0
			for(int k = i;k < N;k++)
			{
				if(str[k]!=str[k-i])
				{
					flag = 1;
					break;
				}
			}
			if(flag==0)
			{
				cout<<i;
				break;
			}
		}
		
	}
	cout<<endl;
	return 0;
}

三、测试结果

6
233233
3

--------------------------------
Process exited after 4.124 seconds with return value 0
请按任意键继续. . .

Code_流苏(一个喜欢古诗词和编程的Coder)
如果对大家有帮助的话,希望大家能多多点赞+关注!这样我动力会更足哦! ღ( ´・ᴗ・` )比心

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。