您的位置:首页 > 理论基础 > 数据结构算法

poj 2406 : acm 数据结构Power Strings (KMP)

2016-05-25 17:34 239 查看
题意:给出一个串,问你这个最多是多少个相同的字串重复连接而成的。如:abcabcabc则最多有3个abc连接而成。

求出长度,求出循环节,相除即可

#include<iostream>

#include<cstring>

using namespace std;

const int Max = 100000005;

 

char str[Max];        

int len, next[Max];

 

//kmp问题模板...

void get_next(){

    int i = 0, j = -1;

    next[0] = -1;

    while(i < len){

        if(j == -1 || str[i] == str[j]){

            ++i; ++j;

            next[i] = j;

        } 

        else j = next[j];

    }

}

 

int main(){

    while(scanf("%s", str) != EOF){

        if(str[0] == '.') break;

        len = strlen(str);

        get_next();

        int ans = 1;

        if(len % (len-next[len]) == 0)       //  看整个长度len能分解成x个这种串。

            ans = len / (len-next[len]);

        printf("%d\n", ans);

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: