题解
求包含所有出现过的元素的最短区间长度。
见 poj–3320 Jessica’s Reading Problem(尺取法)
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
string s;
cin >> n >> s;
set<char> all;
for(int i = 0; i < s.length(); ++i) all.insert(s[i]);
int cnt = all.size();
map<char, int> count;
int L = 0, R = 0, num = 0;
int ans = n;
for(; ;){
while(R < n && num < cnt){
if(count[s[R++]]++ == 0) num++;
}
if(num < cnt) break;
ans = min(ans, R - L);
if(--count[s[L++]] == 0) num--;
}
cout << ans << endl;
return 0;
}