找子串
题目描述:
给定两个字符串a和b,我们定义a*b表示字符串的连接。例如,如果a=”abc”,b=”def”,那么a*b=“abcdef”,如果这种连接是多重的,可以用幂的形式来定义:a^0=“” (空串),a^(n+1)=a*(a^n)。
输入格式:
只有一行表示一个字符串s,长度至少为1,不超过100
输出格式:
输出最大的n值,如s=a^n(a是某个字符串)
样例输入:
样例1: abcd 样例2: aaaa 样例3: ababab
样例输出:
样例1: 1 样例2: 4 样例3: 3
提示:
本题要用到C++字符串的一些命令。
1)定义字符串类型
string s; //长度无限长
2)读入一行字符串
cin >> s; //读到空格为止
getline ( cin , s ) //以行为单位,读入整行内容给 s
3)求字符串的长度:
s.length( )
4)查看字符串的某一位置的字符:
s [ i ]
5)取字符串当中的某一段子串:
s.substr( i , 3 ) //在s字符串从i位开始连续取长度为3的子串。
6)字符串的比较:
两串字符串s1和s2,可以直接用>、<、==等关系运算符进行比较。
时间限制: 1000ms
空间限制: 256MB
#include <bits/stdc++.h>
using namespace std;
string s,s1,s2;
long long a,p,k,z,t,n;
int main() {
cin>>s;
for(int i=1;i<=s.size();i++){
s1=s.substr(0,i);
s2="";
for(int j=1;j<=s.size()/s1.size();j++){
s2+=s1;
}
if(s==s2){
cout<<s.size()/s1.size();
return 0;
}
}
}