题解 | #重复的子字符串#
重复的子字符串
http://www.nowcoder.com/practice/9b921e9554b24d2e8e617cf8b77912c3
如果重复,那么至少重复一次吧,字符串个数从1到len/2,均检查一遍,看是否是被重复的字符串
第一趟检查是否是第一个字符重复而形成的字符串
第二趟检查是否是前两个字符重复而形成的字符串
第三趟检查是否是前三个字符重复而形成的字符串
……
#include<stdbool.h>
bool repeatSubstring(char* str ) {
int len=strlen(str);
for(int i=1; 2*i<=len; i++){ //基准字符串的长度从1依次增加到len/2
if(len % i == 0){ //总长对i取余为0表示有可能是重复的
bool flag = true; //先标记一下
for(int j = i; j<len; j++){ //初设j=i表示第一次重复的开始处
if(str[j] != str[j-i]){ //每次和前一个子串比较
flag = false; //不相等表示此次的基准字符串不是所求
break; //跳出此次for,
}
}
if(flag == true) //标记仍为真,意味着for正常结束,表示比较的都相同
return true; //说明是由重复字符串组成的
//如果标记为false表示异常结束,此次基准字符串不是所求,那么i++
}
//以上是对i取余为0的情况,如果对i取余不为0说明重复不了,那么i++
}
return false; //全都比较完也没有发现合适的基准字符串,说明不是重复的
}
查看10道真题和解析