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;
}