问题描述
给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。
问题分析
如果一个字符串s能够由其子字符串重复多次构成,那么这个子字符串的长度 l l l一定是字符串s长度 L L L的因子,即 L / l = z ( z ∈ 整数 ) L/l=z (z\in整数) L/l=z(z∈整数)。有了上述思路就能求出候选的字符串,然后一一验证这些字符串是否成立即可。
代码
bool repeatedSubstringPattern(char* s) {
int length = 0;
while(s[length]!='\0'){
length++;
}
int factor = 0;
for(int i=1; i<=length/2; i++){
if(length%i==0){
factor++;
}
}
int *nums = (int *)malloc(sizeof(int)*(factor));
factor=0;
for(int i=1; i<=length/2; i++){
if(length%i==0){
nums[factor++] = i;
}
}
for(int count = 0; count<factor; count++){
int flag = 1;
for(int i=0; i<length; i++){
if(s[i] != s[i%nums[count]]){
flag = 0;
break;
}
}
if(flag){
return true;
}
}
return false;
}