标准的尺取 但是看到了一个写的非常好的代码 枚举的右边的边界 维护最左边一个的map数量是1 找最小答案就行了 学习了 真是语言之美
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <iostream>
#include <sstream>
#include <ostream>
#include <algorithm>
#include <ctype.h>
#include <cmath>
#include <queue>
#include <set>
#include <stack>
#include <map>
#include <vector>
#define inf 1e9+7
#define pi acos(-1)
#define natrule exp(1)
using namespace std;
#pragma comment(linker, "/STACK:1024000000,1024000000")
int n,tot,cnt,ans=inf,temp[70],f[70];
int main()
{
cin>>n;
string s;
cin>>s;
for(int i=0;i<n;i++) if(!temp[s[i]-'A']) temp[s[i]-'A']++,tot++;
for(int i=0,j=0;i<n;i++)
{
if(!f[s[i]-'A']) cnt++;
f[s[i]-'A']++;
while(f[s[j]-'A']>1) f[s[j]-'A']--,j++;
if(cnt==tot) ans=min(i-j+1,ans);
}
cout<<ans;
return 0;
}