牛客 eli和字符串(贪心)

题目链接:点击这里
在这里插入图片描述

#include<iostream>
#include<algorithm>
#include<string>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<climits>

using namespace std;
typedef long long ll;
const int MOD = 10000007;
const int INF = 0x3f3f3f3f;
const double PI = acos(-1.0);
const int maxn = 1010;
int n, k;
string s;
vector<int> vec[30];

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	cin>>n>>k;
	cin>>s;
	
	for(int i = 0; i < n; ++i)		//统计相同字母出现的位置 
		vec[s[i]-'a'].push_back(i);
	
	int maxx = INT_MIN;
	for(int i = 0; i < 26; ++i)
	{
		int tmp = vec[i].size();
		if(tmp > maxx)
			maxx = tmp;
	}
	
	if(maxx<k)		//没有一个字母的数量达到k个,则输出-1 
	{
		printf("-1\n");
		return 0;
	}
	
	int minn = INT_MAX;
	for(int i = 0; i < 26; ++i)
	{
		if(vec[i].size()<k)
			continue;
		for(int j = k-1; j < vec[i].size(); ++j)	//包含k个相同字母的子串长度 
			minn = min(minn, vec[i][j]-vec[i][j-k+1]+1);
	}
	
	printf("%d\n", minn);
	
	return 0;
}
发布了727 篇原创文章 · 获赞 111 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_42815188/article/details/104214656