eli和字符串

链接: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;
}

 

猜你喜欢

转载自www.cnblogs.com/Aracne/p/12262859.html
今日推荐