poj2752

链接:点击打开链接

题意:从大到小输出所有既是前缀有是后缀的字符串的长度

代码:

#include <stack>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
using namespace std;
int next[500005];
char str2[500005];
void get_next(int len2){
    int j=0,k=-1;
    next[0]=-1;
    while(j<len2){
        if(k==-1||str2[j]==str2[k]){
            k++;j++;
            next[j]=k;
        }
        else
        k=next[k];
    }
}
int main(){
    int j,t;
    while(scanf("%s",str2)!=EOF){
        stack<int> s;
        j=strlen(str2);
        s.push(j);
        get_next(j);
        while(j!=0&&next[j]!=0){
            s.push(next[j]);
            j=next[j];
        }                                       //其实就是由字符串后面逐渐向前找的过程
        while(s.size()){
            printf("%d ",s.top());
            s.pop();
        }
        printf("\n");
    }
    return 0;
}


 

你可能感兴趣的:(poj2752)