#KMP#poj 2406 Power Strings

题目

求字符串里有多少组循环节。


分析

kmp,算出循环节的长度,如果匹配不出循环节,只有1组,否则用字符串长度除以循环节长度。


代码

#include <cstdio>
#include <cstring>
using namespace std;
char s[1000001]; int p[1000001],j;
int main(){
    while (scanf("%s",s)&&s[0]!='.'){
        p[0]=j=-1; int l=strlen(s);
        for (int i=1;i<l;i++){
            while (j>=0&&s[j+1]!=s[i]) j=p[j];
            if (s[j+1]==s[i]) j++; p[i]=j;
        }
        if (l%(l-p[l-1]-1)) puts("1");
        else printf("%d\n",l/(l-p[l-1]-1));
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/sugar_free_mint/article/details/80755683