给一个字符串,问在首位最少添加多少个字符能使得原字符串循环
需要理解next数组,画个图理解就好,用n - next[n]求出循环节然后输出len % p
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define rep(i, j, k) for(int i = j; i <= k; i++)
#define maxn 100009
using namespace std;
int n, Next[maxn];
char s[maxn];
void pre ()
{
Next[0] = Next[1] = 0;
rep (i, 1, n - 1)
{
int j = Next[i];
while (j && s[j] != s[i])
j = Next[j];
Next[i + 1] = s[i] == s[j] ? j + 1 : 0;
}
}
int main ()
{
int ti;
cin >> ti;
while (ti--)
{
scanf ("%s", s);
n = strlen (s);
pre ();
int len = n - Next[n];
//rep (i, 0, n) printf ("%d %d\n", i, next[i]);
if (n % len == 0 && len != n)
printf ("0\n");
else
printf ("%d\n", len - n % len);
}
return 0;
}