팰린드롬만들기 문제 도와주세요

  • shinhj88
    shinhj88

    [[problem:PALNDROMIZE]]
    이코드가 시간초가가나는 왜 나는지 도무지 이해가 가지 않습니다. KMP알고리즘을 그대로 이용하여 풀었는데...

    #include <cstdio>
    #include <cstring>
    #include <vector>
    using namespace std;
    const int MAX_S = 100001;
    char S[MAX_S],P[MAX_S];
    int N;
    vector<int> faildfun()
    {
    
            vector<int> pi(N);
            int k=-1;
            for(int i=1;i<N;i++)
            {
                    while(k!=-1&&P[i]!=P[k+1])k=pi[k];
                    if(P[i]==P[k+1])k++;
                    pi[i]=k;
            }
    
            return pi;
    }
    int KMP()
    {
            vector<int> pi=faildfun();
            int j=-1;
    
            for(int i=0;i<N;i++) {
    
                    while(j!=-1&&P[j+1]!=S[i])j=pi[j];
                    if(P[j+1]==S[i])j++;
    
            }
            return N-j-1;
    }
    int main()
    {
            int T;
            scanf("%d",&T);
            while(T--)
            {
                    scanf("%s",S);
                    N=strlen(S);
                    for(int i = N-1; i >= 0; i--)P[N-i-1]=S[i];
    
                    printf("%d\n",N+KMP());
    
            }
            return 0;
    }
    

    11년 전
0개의 댓글이 있습니다.
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.