C/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;
}

三、测试图

为了使整体内容简洁,此处只展示一组测试数据结果。

image

时间记录:2022-03-21 10:08:00 星期一
作者:
月流苏(一个喜欢古诗词和编程的Coder)

posted @ 2022-03-21 14:16  月流苏  阅读(176)  评论(0)    收藏  举报