質問が意図される:文字列Tに、文字列Tのこのセクションの最小サイクル長を出力します
あなたはプレフィックスのn-PIの配列を見つけた場合は、[n]はNで割り切れる、答えはそう答えはNであり、nは-PI [N]です。
上記、赤と青のプレフィックスサフィックス場合と同じ同じ2つの緑色など、文字列全体がn-PI [N]に分割することができる同じセクションストリング
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000;
int pi[maxn];
char a[maxn];
void getnext(int n) {
pi[1] = 0;
for (int i = 2, j = 0; i <= n; i++) {
while (j > 0 && a[i] != a[j + 1]) j = pi[j];
if (a[i] == a[j + 1]) j++;
pi[i] = j;
}
}
int main() {
int _;
scanf("%d", &_);
while (_--) {
scanf("%s", a + 1);
int n = strlen(a + 1);
getnext(n);
if (n % (n - pi[n]) == 0)
printf("%d\n", n - pi[n]);
else
printf("%d\n", n);
if (_) printf("\n");
}
}