问题描述
给定一个非空的字符串 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;
}