poj2406-kmp的next数组的简单应用(2)

来源:互联网 发布:java未来发展 编辑:程序博客网 时间:2024/05/16 07:38

这题是求字符串可以由多大的子串重复叠加成;主要试看lt与lt-next[lt-1]-1的关系;lt-next[lt-1]-1表示的意义是剩下的距离,因为前面已经匹配过了,如果最后可以匹配的话则都可以匹配;而最后可以匹配主要看长度关系。

#include<cstdio>#include<cstring>const int maxn=1e6+5;char t[maxn];int Next[maxn];int lt;void getNext(){    int i,j=-1;    Next[0]=-1;    for(int i=1;i<lt;i++){        while(j!=-1&&t[i]!=t[j+1])j=Next[j];        if(t[i]==t[j+1])j++;        Next[i]=j;    }}int main(){    while(~scanf("%s",t)){        if(!strcmp(t,"."))break;        lt=strlen(t);        getNext();        if(lt%(lt-Next[lt-1]-1)){            printf("1\n");        }        else {            printf("%d\n",lt/(lt-Next[lt-1]-1));        }    }    return 0;}


0 0
原创粉丝点击