https://ac.nowcoder.com/acm/problem/18386
题目大意:选取字符串最长的包含所有小写字母的substring的长度。
比较简单,用sliding window即可,维护一个left和right区间,每次right尽量伸长,left再减少一位。
#define MAXN 1000005
char s[MAXN];
int doit() {
int n = strlen(s);
// [l, r).
int l = 0, r = 0;
int ans = n;
u_m<char, int> counter;
while (l < n) {
while (r < n) {
if (sz(counter) == 26) {
ans = min(ans, r - l);
break;
}
counter[s[r]]++;
++r;
}
counter[s[l]]--;
if (counter[s[l]] == 0) {
counter.erase(s[l]);
}
++l;
if (sz(counter) == 26) {
ans = min(ans, r - l);
}
}
return ans;
}
int main(int argc, char* argv[]) {
scanf("%s", s);
printint(doit());
return 0;
} 
京公网安备 11010502036488号