題意:給你一個字符串,讓你求這個字符串變成一個循環節的字符串最少需要添加的字符數目。
思路:說白了就是通過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;
}