给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
示例 1:
输入: “abab”
输出: True
解释: 可由子字符串 “ab” 重复两次构成。
示例 2:
输入: “aba”
输出: False
示例 3:
输入: “abcabcabcabc”
输出: True
解释: 可由子字符串 “abc” 重复四次构成。 (或者子字符串 “abcabc” 重复两次构成。)
分析:想找到子串,可以采用将母串的字符依次赋给新串;如ababab中ab赋给新串,再通过strcat函数循环进行判断得到ababab,以长度的限制作为循环条件的控制,废话不多说,代码如下:
#include<stdio.h>
#include<string.h>
#define N 10000
int main()
{
char s[N],a[N],b[N];
gets(s);
int i,j;
for(i=0;s[i]!='\0';i++) //依次将s串的字符赋给a;并对每一次a是否为s子串进行判断;
{
a[i]=s[i];
strcpy(b,a);
do
{
strcat(b,a);
if(strcmp(b,s)==0)
{
printf("true");
return 0; //跳出循环;
}
} while(strlen(b)<strlen(s)); //子串进行重复时长度应小于母串;
}
a[i]='\0';
printf("false"); //执行循环后未找到满足条件的子串;
return 0;
}