Vasya and String CodeForces - 676C(尺取)

题意:河老师的新年礼物是一个长度为n的ab串,他想要找出最长的一个子串使得这个子串中每个字符都相等,他称之为“最优子串”。当然对河老师来说这个问题太简单了,于是他加了一个条件:他可以改变这个串中的某些字符,但一次只能改变一个字符,最多能改变k次。河老师想要知道,在可以对串进行改变的前提下,这个ab串的“最优子串”的长度是多少。

题解:要么改变a,要么改变b.以改变b为例,可以改变k个字符意味着a字符总最多可以有b个字符,那么我们尺取时最多容忍k个b字符,然后用一个ans去维护记录尺取时的最大长度就可以了。

AC代码:

#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
string str;
int main(){
	int n,k;
	cin>>n>>k>>str;
	int s=0,sum=0;
	int ans=0;
	for(int i=0;i<n;i++){
		if(str[i]=='b')sum++;
		while(sum>k)if(str[s++]=='b')sum--;
		ans=max(ans,i-s+1);
	}
	s=0,sum=0;
		for(int i=0;i<n;i++){
		if(str[i]=='a')sum++;
		while(sum>k)if(str[s++]=='a')sum--;
		ans=max(ans,i-s+1);
	}
	cout<<ans<<endl;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值