string s[N];
unordered_map<string, bool> mp;
unordered_map<string, int> opt;
void Solve() {
int n; cin >> n;
for(int i = 1; i <= n; i ++) {
string s; cin >> s; mp[s] = 1;
}
int m, aim = 0; cin >> m;
for(int i = 1; i <= m; i ++) {
cin >> s[i];
if(mp[s[i]] && !opt[s[i]]) aim ++, opt[s[i]] ++;
}
cout << aim << '\n';
opt.clear();
int l = 1, r = 1, cnt = 0, maxn = 0, maxr = 0;
while(r <= m && cnt < aim) {
if(mp[s[r]] && !opt[s[r]]) cnt ++;
opt[s[r]] ++;
++ r;
}
-- r;
int len = r - l + 1;
while(l <= m && r <= m) {
// cout << l << ' ' << r << ' ' << opt[s[l]] << '\n';
l ++;
// cout << opt[s[l - 1]] << ' ' << l << '\n';
if(mp[s[l - 1]]) {
opt[s[l - 1]] --;
if(opt[s[l - 1]] == 0) {
while(s[r] != s[l - 1] && r <= m) ++ r;
if(s[r] == s[l - 1]) len = min(len, r - l + 1), opt[s[r]] ++;
}
else {
len = min(len, r - l + 1);
}
}
else {
len = min(len, r - l + 1);
}
}
cout << len << '\n';
}
RT.双指针 WA on #2 #6 #7 #9 #10。