利用二维数组记录每个字母的位置,进而可得子链长度
#include <iostream>
#include<string>
#include<vector>
#include<climits>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n,k;
string s;
cin>>n>>k>>s;
vector<vector<int>>a(26);
for(int i=0;i<n;i++){
a[s[i]-'a'].push_back(i);
}
int min_len=INT_MAX;
for(int i=0;i<26;i++){
int n=a[i].size();
if(n<k)continue;
for(int j=0;j<=n-k;j++){
int len=a[i][j+k-1]-a[i][j]+1;
if(len<min_len)min_len=len;
}
}
cout<<(min_len==INT_MAX?-1:min_len)<<endl;
return 0;
}

京公网安备 11010502036488号