#ACM0077. 江月诗的好串

江月诗的好串

题目描述

江月诗有一个长度为 nn 的字符串 ss,仅由字符 a\rm a 和 字符 b\rm b 组成,江月诗认为字符(a\rm ab\rm b)全部连续地排列在一起,形成恰好一个连续的 ab\rm ab 块的字符串就是一个 好串^{\dagger}

现在你可以进行多次操作,每次操作,你可以选择一个位置 ii1in11 \le i \le n-1),交换相邻的字符 sis_isi+1s_{i+1}

你需要用最少的操作次数,让最终的字符串变为 好串^{\dagger}

注意:另一种字符可以在这个块的前面或后面,形成最多两个(可能为空)的块。

^{\dagger} 以下是一些好串的最终形式示例:

  • aaabbbaaa\rm aaabbbaaa —— 所有的 b\rm b 连续在一起(一个块),a\rm a 可以在这个块前后;
  • bbbaaaaaabbb\rm bbbaaaaaabbb —— 所有的 a\rm a 连续在一起,b\rm b 则在字符串边缘;
  • aaaaabbbb\rm aaaaabbbbbbbbaaaaa\rm bbbbaaaaa —— 两种字符分别各自形成一个连续块。

你需要计算,实现上述目标状态所需的最小操作次数。

输入格式

输入包含若干组测试数据。

第一行输入一个整数 TT1T1041 \le T \le 10^4),表示测试用例的组数。

每组测试数据第一行输入一个整数 nn1n2×1051 \le n \le 2 \times 10^5),表示字符串 ss 的长度。

第二行输入一个仅包含字符 a\rm ab\rm b,长度为 nn 的字符串 ss

保证所有测试用例中 nn 的总和不超过 2×1052 \times 10^5

输出格式

对于每组测试数据,输出一行一个整数,表示使同一种字符形成一个连续块所需的最小操作次数。

输入输出样例 #1

输入 #1

5
4
abab
6
bababa
7
abababa
2
ab
1
b

输出 #1

1
2
2
0
0

说明/提示

在第一个测试用例中,初始字符串为 abab\rm abab

  • 交换相邻的第 2233 个字符后,得到字符串 aabb\rm aabb
  • 或交换第 1122 个字符后,得到字符串 baab\rm baab

两种情况下都只需操作一次,之后同一类字符已经连在一起,故最少操作次数为 11

在第五个测试用例中,字符串仅包含一个字符 b\rm b。单个字符已经形成了连续块,不需要任何操作,输出 00