感觉到极致了
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 50;
map <string, int> mp;
map <string, bool> has;
int n;
char s[N];
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
scanf("%s", s + 1);
string d;
int len = strlen(s + 1);
for (int j = 1; j <= len; ++j) d.push_back(s[j]);
int res = 1 << 30;
for (int j = 0; j < len; ++j, d.pop_back())
if (has[d])
res = min(res, mp[d] + j);
printf("%d\n", min(res, len));
d = "";
for (int j = 1; j <= len; ++j) {
d.push_back(s[j]);
bool* p1 = &has[d];
int* p2 = &mp[d];
if (!*p1) *p2 = len - j, *p1 = 1;
else *p2 = min(*p2, len - j);
}
}
return 0;
}