题目
题解
实现题。
题目大意:将一个字符串分割成若干个子串,每个子串必须完全相等,问最多能分割多少个子串。
输入字符串的第一个字符肯定是分割后每个子串的开头字符,那我们将输入字符串的左侧子串进行枚举,以枚举到的子串长度作为步长看看这个子串后面的字符是不是可以分割出这个子串,若可以全部分割成枚举的子串,那就是这个了,这个肯定是最短的。
可以先判断一下后面的字符个数能不能被当前枚举的子串长度整除,若能,我们才进行循环比较,否则直接continue。
代码
#include<bits/stdc++.h>
using namespace std;
int flag;
string s;
int main()
{
cin>>s;
int n = s.size();
for(int i = 0;i < n;i ++, flag = 0) {
if(n%(i+1) != 0) continue;
string sub = s.substr(0, i+1);
for(int j = i+1;j < n;j += (i+1)) if(s.substr(j, i+1) != sub) {flag = 1; break;}
if(!flag) {cout<<n/(i+1); break;}
}
return 0;
}