链接:https://ac.nowcoder.com/acm/contest/3002/G
题目描述
eli拿到了一个仅由小写字母组成的字符串。
她想截取一段连续子串,这个子串包含至少 个相同的某个字母。
她想知道,子串的长度最小值是多少?
她想截取一段连续子串,这个子串包含至少 个相同的某个字母。
她想知道,子串的长度最小值是多少?
题意
相当于就是找字符串当中拥有k个相同字母的最小长度。
直接模拟,通过二维数组,遇到个字母把在字符串的位置它放到对应字母的后面,然后进行判断,不断更新ans的最小值
代码如下:
#include <bits/stdc++.h> #define inf 0x3f3f3f3f #define INF 0x7fffffffffffffff typedef long long ll; const double PI=3.1415926535897931; const long long mod=1e9+7; const int MA= 1e7+10; const int ma= 2*1e5+10; const int few=1e3+10; using namespace std; ////////////////////////////////////////////// int main() { int n,k,ans=inf; string s; cin>>n>>k; cin>>s; vector<int> a[26]; for(int i=0; i<s.size(); i++) { int x=s[i]-'a'; a[x].push_back(i); int len=a[x].size(); if(len>=k) ans=min(ans,i-a[x][len-k]+1); } if(ans==inf) cout<<"-1"<<endl; else cout<<ans<<endl; return 0; }