给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数。
没有优化的next数组的应用。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<string> #define maxn 100010 using namespace std; char p[maxn]; int nex[maxn],n; void get_nex() { int i,j; i=0,j=-1,nex[0]=-1; while(i<n) { if(j==-1||p[i]==p[j]) { i++,j++; nex[i]=j; } else j=nex[j]; } } int main() { int t; scanf("%d",&t); while(t--) { scanf("%s",p); n=strlen(p); get_nex(); int c=n-nex[n];//字符串循环的长度 if(n%c==0&&nex[n]) puts("0");//如果nex[n]==0的话,那么字符串循环的长度与原串相等,那么需要添加n个长度 else printf("%d\n",c-(n%c)); } return 0; }
时间: 2024-10-24 07:51:08