如果重复,那么至少重复一次吧,字符串个数从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; //全都比较完也没有发现合适的基准字符串,说明不是重复的 }