字符串一题。
!!!做题还是太慢太慢了,debug花费了大量时间。
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
struct ttt{
int left,right;
};
char qq[100500];
ttt gg[100500];
int i,j,k,l,f1,f2,f3,t1,t2,t3,n,m;
int l1,l2,r1,r2;
int fun1(){
for(i=1;i<=n;i++){
if(qq[i]=='a')l1++;
else if(qq[i]=='b'){
gg[++t1].left=l1;
gg[t1-1].right=l1;
l1=0;
}
if(i==n){
gg[t1].right=l1;
}
}
int sum1;
sum1=gg[1].left;
for(i=1;i<=m;i++){
sum1+=gg[i].right+1;
}
int max1=sum1;
for(i=m+1;i<=t1;i++){
sum1+=gg[i].right-gg[i-m].left;
if(sum1>max1)max1=sum1;
}
return max1;
}
int fun2(){
for(i=1;i<=n;i++){
if(qq[i]=='b')l1++;
else if(qq[i]=='a'){
gg[++t1].left=l1;
gg[t1-1].right=l1;
l1=0;
}
if(i==n){
gg[t1].right=l1;
}
}
int sum1;
sum1=gg[1].left;
for(i=1;i<=m;i++){
sum1+=gg[i].right+1;
}
int max1=sum1;
for(i=m+1;i<=t1;i++){
// cout << "sum1==" <<sum1 << endl;
sum1+=gg[i].right-gg[i-m].left;
if(sum1>max1)max1=sum1;
}
return max1;
}
int main(){
//freopen("in.txt","r",stdin);
while(scanf("%d%d",&n,&m)==2){
char k1;
memset(qq,0,sizeof(qq));
scanf("%s",qq+1);
l1=0;l2=0;
for(i=1;i<=n;i++)
if(qq[i]=='a')l1++;
else if(qq[i]=='b')l2++;
if(l1<=m||l2<=m){
cout << n << endl;
continue;
}
if(m==0){
char b;
l1=1;
l2=1;
b=qq[1];
for(i=2;i<=n;i++){
if(qq[i]!=b){
l1=0;
}
l1++;
b=qq[i];
if(l1>l2)l2=l1;
// cout <<"l2="<< l2 << endl;
}
cout << l2 <<endl;
continue;
}
l1=0;l2=0;
t1=0;
int r1,r2;
memset(gg,0,sizeof(gg));
r1=fun1();
l1=0;l2=0;
t1=0;
memset(gg,0,sizeof(gg));
r2=fun2();
cout << max(r1,r2) << endl;
}
return 0;
}