C. They Are Everywhere

https://codeforces.com/problemset/problem/701/C

题意:求包含所有类型字符的最小区间长度。

思路:双指针,先右指针逐渐移动,移动过程中如果与左指针组成的区间包含了所有类型字符,那么开始移动左指针,一直到再移动左指针就会打破当前区间包含了所有类型的字符这个条件,然后不断的取最短区间即可。

总结:有一点点的思维,更多的感觉是技巧。。感觉。。

inline void solve() {
	int n;
	cin >> n;
	

	string s;
	cin >> s;

	set<char> diff;
	for (auto c : s) {
		diff.insert(c);
	}

	int ans = n + 1;
	map<char,int> mapp;
	for (int i = 0, j = 0; i < n; ++i) {
		mapp[s[i]] ++;
		if (mapp.size() == diff.size()) {
			while (j < i) {
				if (mapp[s[j]] > 1) {
					mapp[s[j]] --;
					j++;
				}
				else {
					break;
				}
			}
			ans = min(ans, i - j + 1);
		}
	}

	cout << ans << '\n';
}
posted @ 2025-04-15 09:25  _Yxc  阅读(5)  评论(0)    收藏  举报