按题意模拟即可,注意不要用string,会超时。
#include <iostream>
#include <string>
#include <vector>
#include <cstring>
#define int long long
using namespace std;
const int N = 300;
char s[N][20],ch;
int cnt[N], sz[N],a[5000086];
signed main ()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while (t --)
{
int n;
cin >> n;
memset (cnt, 0, sizeof (cnt));
for (int i = 1; i <= n; i ++){
cin >> s[i];
sz[i] = strlen (s[i]);
for (int j = 0; j < sz[i]; j ++)
{
cnt[s[i][j] - 'a'] ++;
}
}
int dif = 0,len=0;
for (int i = 0; i < 26; i ++)
{
if (cnt[i])
{
dif ++;
}
}
for (int i = 0; i < 50001; i ++)
for (int j = 1; j <= n; j ++)
a[len++]=s[j][(i+sz[j]) % sz[j]];
int j = 0, tot = 0, res = 1e9;
for (int i = 0; i < len; i ++){
ch = a[i];
if (!cnt[ch]) tot ++;
cnt[ch] ++;
while (cnt[a[j]] > 1)
{
cnt[a[j]] --;
j ++;
}
if (tot == dif)
res = min (res, i - j + 1);
}
cout << res << endl;
}
}