思路

滑动窗口
确保窗口里面的值包含26个字母
如果不包含, 窗口就往右边伸展
如果已经包含, 就尝试左边缩小窗口

ac代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const int inf = 1e9;
map<char, int> vis;
int main()
{
    string s;
    cin >> s;
    int n = s.length();
    int l = 0, r;
    int ans = inf;
    for (r = 0; r < n; r++)
    {
        vis[s[r]]++;
        while (vis.size() == 26)
        {
            ans = min(ans, r - l + 1);
            vis[s[l]]--;
            if (vis[s[l]] == 0 ) vis.erase(s[l]);
            l ++ ;
        }
    }
    cout << ans;
    return 0;
}