最后两点TLE求助
查看原帖
最后两点TLE求助
1244005
KASS楼主2024/4/11 06:03

想不出来了 大佬们提供点思路

#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;
}
2024/4/11 06:03
加载中...