#include <bits/stdc++.h>
#define int_max 0x3f3f3f3f;
#define long_max 9223372036854775807;
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
using VI = vector<int>;
typedef unsigned long long ull;
const int MAXN = 1e6;
int t;
string a = "BTTB";
string b = "TBBT";
int res = 0 ;
//挨着的bt可以和tb交换
//btbttbtb
//bttbbttb
//BTTBTTB
//BTTTBBT
//TTBTBTTBTBTTTBTTB
//TTBTTBBTBTTTTTBBT
//考虑一个t后缀能不能 btbtbt tb
//考虑一个t前缀能不能 bt tbtbtb ttt
void solve(){
int n;
string s;
cin>>n;
cin>>s;
VI pre(n+2,0);
VI ne(n+2,0);
VI m(n+2,0);
VI h(n+2,0);
s = " " + s;
int ans = 0;
for(int i=1;i<n;i++) {
if(s[i] == 'B' && s[i+1] == 'T')
m[i] = 1;
}
for(int i=n;i>1;i--){
if(s[i] == 'B' && s[i-1] == 'T'){
h[i] = 1;
}
}
for(int i=1;i<=n;i++){
if(s[i] == 'B'){
if(s[i-1] == 'B') pre[i] = 0;
else{
if(i-3>=0)
pre[i] = (pre[i-2] || m[i-3]);
}
}
}
for(int i=n;i>=1;i--){
if(s[i] == 'B'){
if(s[i+1] == 'B') ne[i] = 0;
else {
if(i + 3 <= n){
ne[i] = (ne[i+2] || h[i+3]);
}
}
}
}
res = 0;
for(int i=1;i<=n;i++){
if(s[i] == 'B') continue;
else if(s[i] == 'T'){
int j = i;
while(j<=n && s[j+1] == 'T') j++;
res = max(res,j-i+1 + ne[j+1] + pre[i-1]);
i = j;
}
}
cout<<res<<"\n";
}
int main() {
cin>>t;
while(t--){
solve();
}
}
考虑一个b能不能通过后缀变换成 t 那么必定有序了 bt bt bt bt tb
只要考虑 i + 2 的位置的b能不能变成t
预处理一个tb的位置
前缀同理