题目
现代诗如蚯蚓
断成好几截都不会死
字符串断成好几截
有可能完全一样
请编写程序
输入字符串
输出该字符串最多能断成多少截完全一样的子串
样例说明
最多能断成四个”abc”,也就是abc重复四遍便是原串
同时也能断成两个”abcabc”
最坏情况是断成一个原串”abcabcabcabc”
输入
一行,一个字符串
数据规模和约定
字符串长度< =1000
输出
一行,一个正整数表示该字符串最多能断成的截数
样例输入
abcabcabcabc
样例输出
4
解题思路
本题要将字符串划分为若干等份,因此,就要找到字符串的因数,只有划分为因数份,才可能符合题意。在找到因数后,从大到小遍历因数,如果每一份恰好相同,那么当前因数便是可以划分的最大份数。
代码
#include<bits/stdc++.h>
using namespace std;
vector <int> factor;//存储输入字符串长度的因数的变量
void Factor(int a){
int i;
for (i=a;i>0;i--)//由大到小存入,因为题目要找最大值
if (a%i==0)
factor.push_back(i);
}
int main()
{
char a[1001];//字符串长度< =1000
scanf("%s",a);
int i,j,k,wrong,gap,lena = strlen(a);
Factor(lena);//找到所有因数
int lenf = factor.size();
for (i=0;i<lenf;i++)
{
wrong = 0;
gap = lena/factor[i];//每一组字符串的长度
for (j=0;j<gap;j++)
{
for (k=j;k<lena;k+=gap)
{
if (a[k]!=a[j])
{
wrong = 1;
break;
}
}
if (wrong==1)//划分错误
break;
}
if (wrong==0)//划分正确,无需再找
break;
}
printf("%d",factor[i]);
return 0;
}