使用KMP算法
bool kmp(char* text_str,int text_len,char*pattern_str);
bool repeatedSubstringPattern(char* s) {
int n = strlen(s);
char* ss = (char*)malloc(sizeof(char)*2*n+1);
// strcpy(ss,s);
// strcpy(ss+n,s);
ss[0] = 0;
strcat(ss,s);
strcat(ss,s);
return kmp(ss+1,2*n-2,s);
}
bool kmp(char* text_str,int text_len,char*pattern_str){
int m = strlen(pattern_str);
if(m == 0) true;
int *pm = (int*) malloc(sizeof(int)*m);
int j = 0;
pm[0] = 0;
for(int i = 1; i < m;i++){
while(j > 0 && pattern_str[i] != pattern_str[j])
j = pm[j-1];
if(pattern_str[i] == pattern_str[j])
j++;
pm[i] = j;
}
// int n =strlen(text_str);
int n = text_len;
j = 0;
for(int i = 0;i < n;i++){
while(j > 0 && text_str[i] != pattern_str[j])
j = pm[j-1];
if(text_str[i] == pattern_str[j])
j++;
if(j == m)
return true;
}
return false;
}