利用二维数组记录每个字母的位置,进而可得子链长度

#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;
}