我(菜鸡)的想法是先从起始点开始扫描然后直到有字母达到k个 达不到就输出-1
用数组储存字符个数 用ans记录最短长度
然后维护这一子串 从起始点开始删减字符 直到不满足 从终止点添加字符直到满足
如此重复
这样把字符串走完 最短长度就出来了

蒟蒻的代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll n,k;
ll q[1000];
string a;
ll ff()
{
    for(int i='a';i<='z';++i)
        if(q[i]==k) return 1;
    return 0;
}
int main()
{
  cin>>n>>k>>a;
  ll len=0;
  ll lenmin=1e10;
  ll kk=1;
  ll  l,r=0;
  for(int i=0;i<n;++i)
  {
        q[a[i]]++;
        len++;
        if(ff()){l=i;break;}

  }
  if(!ff()){cout<<-1<<endl;return 0;}
  lenmin=len;
 while(l<n)
 {
    if(ff())
    {
     lenmin=min(len,lenmin);
     q[a[r]]--;
     r++;
     len--;
    }
    else
    {
        l++;
        q[a[l]]++;
        len++;
    }
 }
 cout<<lenmin<<endl;
    return 0;
}