![](https://i-blog.csdnimg.cn/direct/4c69021035f74528861f3dc6ba31c248.png)
这道题咱首先用26个元素的数组来充当哈希数组来标记26个字母出现的个数
比如'a'-'a'放在0号元素,'b'-'a'放在1号元素
kind从0开始,如果进窗口的元素之前是0,就让kind++
如果满足kind==26的时候就是合法的一个子串,就进入循环,每次更新字符串长度,让left指的元素出窗口,我们来写一下代码
cpp
#include <iostream>
using namespace std;
string s;
int mp[26];
int kind;
int main()
{
cin >> s;
int n = s.size();
int ret = 1e6+10;
for(int left = 0,right = 0;right <n;right++)
{
if(mp[s[right]-'a']++ == 0) kind++;
while(kind == 26)
{
ret = min(ret,right-left+1);
if(mp[s[left]-'a']-- == 1) kind--;
left++;
}
}
cout << ret << endl;
return 0;
}