HDU3746 Cyclic Nacklace KMP找循環節

題意:給你一個字符串,讓你求這個字符串變成一個循環節的字符串最少需要添加的字符數目。

思路:說白了就是通過next數組尋找循環節,直接上代碼,求循環節部分很顯然。

代碼如下:

#include <bits/stdc++.h>

using namespace std;

const int maxn=1e5+5;
char p[maxn];
int NEXT[maxn];

void get_NEXT(){
    int k=-1;
    int j=0;
    int n=strlen(p);
    NEXT[0]=-1;
    while(j < n){
        if(k == -1 || p[k] == p[j]){
            k++;
            j++;
            NEXT[j]=k;
        }
        else k=NEXT[k];
    }
}

int main()
{
    ios::sync_with_stdio(false);
    int T;
    cin>>T;
    while(T--){
        cin>>p;
        get_NEXT();
        int len = strlen(p);
        int l=len - NEXT[len];
        if(l != len && len % l == 0){
            cout<<"0"<<endl;
        }
        else {
            cout<<l-NEXT[len]%l<<endl;
        }
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章