题目描述:原题链接
解法:二维存储
思路:
第一维为26个字母,第二维度为该字符出现的次数,a[a~z][N]的值为该字符第N次出现的位置。后枚举作差取最小。
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+7;
int a[30][N];
int main()
{
string s;
int n,m;
cin>>n>>m;
cin>>s;
for(int i=0;i<s.length();i++)
{
a[s[i]-'a'][0]++;
a[s[i]-'a'][a[s[i]-'a'][0]]=i;
}
int minv=0x3f3f3f3f;
for(int i=0;i<30;i++)
{
for(int j=1;j<=a[i][0]-m+1;j++)
{
minv=min(minv,a[i][j+m-1]-a[i][j]+1);
}
}
if(minv==0x3f3f3f3f) cout<<-1<<endl;
else cout<<minv<<endl;
return 0;
}