题意:河老师的新年礼物是一个长度为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;
}