思路:
最后获得的coin数和消除掉的A数量一致
AAAAAAB或者BAAAAA或者AABBAAAAA都可以全部消除,其中某些A替换成B也没问题
那么只有一种可能,ABAAAABAAABA这种不可以全部消除,舍弃掉里面最少的可能的A的数量
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 2e5 + 5;
int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
}
int idx, ne[N], e[N], h[N];
void add(int a, int b) {
e[idx] = b;
ne[idx] = h[a];
h[a] = idx++;
}
void solve(){
string s;
cin >> s; int n = s.size();
int cnta = count(s.begin(),s.end(),'A'), cntb = count(s.begin(), s.end(), 'B');
if (cnta == 0 || cntb == 0) {
cout << 0 << '\n';
return;
}
bool fg = 1;
if (s[0] == 'A' && s[n - 1] == 'A') {
fg = 0;
for (int i = 1; i < n - 1; i++) {
if (s[i] == 'B' && s[i + 1] == 'B')
fg = 1;
}
}
if (!fg) {
int ans = 1e9; int t = 0;
for (int i = 0; i < n; i++) {
if (s[i] == 'A')
t++;
else {
ans = min(ans, t);
t = 0;
}
}
if (t) {
ans = min(ans, t);
}
cnta -= ans;
}
cout << cnta << '\n';
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
std::cout.tie(0);
int t = 1;
cin >> t;
while (t--)
solve();
return 0;
}