题目:
给t个只含有A和B的字符串。
AB可以变成BC,然后获得一个硬币
BA可以变成CB,然后获得一个硬币
解读:
推论一、每个B都可以使它的左右任意一边的A都变成硬币,例如AAAB,可以从左开始变,变成3个硬币
推论一继续延申
1.只要有n个B,就可以使N个区间内的A变成硬币(有多少A就有多少硬币)
2. 以AAB....BA为例,需要舍去最小A区间。
3.如果两个B相连,则可以获得所有A。如...AAA BB AAA...
4.B在开头或者结尾,也都可以获得所有A。以B开头为例,所有B只要清空右边的A,即可
#include <iostream>
#include <cstdio>
using namespace std;
int main (){
int t,n,min,c[200002]={-1},z[200002]={0};
string s;
cin >> t;
for (int l=0;l<t;l++,min=200002){
cin >>s;
n=0;
for (int i=0;i<s.size();i++){
if (s[i]=='B') {
c[++n]=i;
z[n]=c[n]-c[n-1]-1;
min=z[n]<min?z[n]:min;
}
z[n+1]=s.size()-c[n]-1;
min=z[n+1]<min?z[n+1]:min;
}
cout << s.size()-n-min <<endl;
}
}