题目链接:点击这里
#include<iostream>
#include<algorithm>
#include<string>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<climits>
using namespace std;
typedef long long ll;
const int MOD = 10000007;
const int INF = 0x3f3f3f3f;
const double PI = acos(-1.0);
const int maxn = 1010;
int n, k;
string s;
vector<int> vec[30];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>k;
cin>>s;
for(int i = 0; i < n; ++i) //统计相同字母出现的位置
vec[s[i]-'a'].push_back(i);
int maxx = INT_MIN;
for(int i = 0; i < 26; ++i)
{
int tmp = vec[i].size();
if(tmp > maxx)
maxx = tmp;
}
if(maxx<k) //没有一个字母的数量达到k个,则输出-1
{
printf("-1\n");
return 0;
}
int minn = INT_MAX;
for(int i = 0; i < 26; ++i)
{
if(vec[i].size()<k)
continue;
for(int j = k-1; j < vec[i].size(); ++j) //包含k个相同字母的子串长度
minn = min(minn, vec[i][j]-vec[i][j-k+1]+1);
}
printf("%d\n", minn);
return 0;
}