llllmz

导航

459. 重复的子字符串c

void build(int* next,char* s,int n){
    next[0]=-1;
    int index=1,j=-1;
    while(index<n){
        if(j==-1 || s[index-1] == s[j]){
            j++;
            next[index++]=j;
        }else{
            j=next[j];
        }
    }
    for(int i=0;i<n;i++) printf("%d ",next[i]);
}

bool repeatedSubstringPattern(char* s) {
    int n=strlen(s);
    if(n==1) return false;
    int* next=(int*)malloc(sizeof(int)*n);
    build(next,s,n);
    int t=next[n-1];
    if(s[t]!=s[n-1]) return false;
    t++;
    if(n%(n-t)!=0 ) return false;
    return true;
}

 

posted on 2024-03-19 16:22  神奇的萝卜丝  阅读(15)  评论(0)    收藏  举报