最终形式一定是形如aba的串(而aba3部分均可能为0),只需使得算出的b的前缀a和后缀a数量,以及中间的b串的总和最大
转自https://www.cnblogs.com/HDMaxfun/p/9340012.html
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MX = 5000 + 10;
char str[MX];
int f[MX], b[MX];
int b_list[MX];
int main() {
memset(str,0,sizeof(str));
while(~scanf("%s",str)) {
memset(f,0,sizeof(f));
memset(b,0,sizeof(b));
memset(b_list,0,sizeof(b_list));
int tot = 0;
int sum = 0;
int len = strlen(str);
for(int i = 0; i < len; i++) {
if(str[i] == 'b') {
b_list[tot++] = i;
} else sum++;
f[i]=sum;
}
sum=0;
for(int i = len-1; i >= 0; i--) {
if(str[i] == 'a') sum++;
b[i] = sum;
}
if(tot==0){
printf("%d\n",len);
continue;
}
int mx=-1;
for(int i = 0; i < tot; i++) {
for(int j = i; j < tot; j++) {
sum = f[b_list[i]]+b[b_list[j]]+1+j-i;
mx=mx>sum?mx:sum;
}
}
memset(str,0,sizeof(str));
printf("%d\n",mx);
}
return 0;
}