想不出来了 大佬们提供点思路
#include<iostream>
#include<vector>
using namespace std;
vector<string> str1;
int p[27];
int min1=0x3f3f3f3f;
bool check(int p[]) {
for (int i = 0; i < 26; i++) {
if (p[i] == 0) {
return false;
}
}
return true;
}
int main() {
int n;
scanf("%d",&n);
for(int i = 0;i<n;i++){
string str2;
cin >> str2;
str1.push_back(str2);
}
int left = 0, right = 0;
while (right < n-1) {
memset(p, 0, sizeof p);
right++;
int ans = 0;
for (int i = left; i <= right; i++) {
for (int j = 0; j < str1[i].size(); j++) {
p[str1[i][j] - 97]++;
ans++;
}
}
if (check(p)) {
while (check(p)) {
for (int i = 0; i < str1[left].size(); i++) {
p[str1[left][i] - 97]--;
ans--;
}
left++;
}
ans += str1[left - 1].size();
min1 = min(min1, ans);
}
}
cout << min1;
return 0;
}