POJ2752--Seek the Name, Seek the Fame

题目在这儿。

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
char s[400001];
int len,next[400001],sum[400001];
void get_next(int len){
    int i=0,j=-1;
    next[0]=-1;
    while(i<len){
        if((j==-1)||(s[i]==s[j])){
            i++;
            j++;
            next[i]=j;
        }
        else{
            j=next[j];
        }
    }
}
int main(){
    while(scanf("%s",s)!=EOF){
        int k=0;
        len=strlen(s);
        get_next(len);
        for(int i=len;i!=0;){
            sum[k++]=next[i];
            i=next[i];
        }
        for(int i=k-2;i>=0;i--){
            printf("%d ",sum[i]);
        }
        printf("%d\n",len);
    }
    return 0;
}

  

通过KMP算法来处理字符串匹配的问题。

最好用优化版的代码,适用面广--佚名。

猜你喜欢

转载自www.cnblogs.com/xiongchongwen/p/11135499.html