void getNext(int* next, const char* s){
next[0]=0;
int j = 0,len=strlen(s);//j为前缀指针
for(int i=1;i<len;i++){//i为后缀指针
while(j>0&&s[i]!=s[j]){
//前后缀不相等时,前缀一直回退,最多退到j=0就不会再进入这个循环了
j = next[j-1];
}
if(s[i] == s[j]){
//前后缀相等时
j++;
}
next[i] = j;//将j赋给next[i]
}
}
bool repeatedSubstringPattern(char * s){
int len = strlen(s);
int next[len];
getNext(next, s);//获取字符串s的next数组
if(next[len-1] != 0 && len % (len - next[len-1]) == 0){
return true;
}
return false;
}
LeetCode:459. 重复的子字符串(KMP算法)
于 2023-01-27 13:23:10 首次发布