poj2406(求字符串的周期,kmp算法next数组的应用)

Posted frankchen831x

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj2406(求字符串的周期,kmp算法next数组的应用)相关的知识,希望对你有一定的参考价值。

题目链接:https://vjudge.net/problem/POJ-2406

题意:求出给定字符串的周期,和poj1961类似。

思路:直接利用next数组的定义即可,当没有周期时,周期即为1。

AC代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

const int maxn=1e6+5;
int n,nex[maxn],len;
char s[maxn];

void get_next(){
    int j;
    j=nex[0]=-1;
    for(int i=1;i<len;++i){
        while(j>-1&&s[i]!=s[j+1]) j=nex[j];
        if(s[i]==s[j+1]) ++j;
        nex[i]=j;
    }
    int t1=len-1,t2=nex[t1];
    if((t1+1)%(t1-t2)==0&&(t1+1)/(t1-t2)>1)
        printf("%d
",(t1+1)/(t1-t2));
    else
        printf("1
");
}

int main(){
    while(scanf("%s",s),len=strlen(s),s[0]!=.||len!=1)
        get_next();
    return 0;
}

 

以上是关于poj2406(求字符串的周期,kmp算法next数组的应用)的主要内容,如果未能解决你的问题,请参考以下文章

kmp+最小循环节poj 2406 Power Strings

poj 2406 Power Srings (kmp循环节) (经典)

POJ-2406Power Strings-KMP+定理

KMP算法及KMP算法的应用(POJ2406)

poj1961(kmp算法next数组应用)

poj2185(kmp算法next数组求最小循环节,思维)