#706. 最少集中次数
最少集中次数
题目描述
给定一个长度为 的字符串 ,仅由字符 'a' 和 'b' 构成。
一次操作可以选择一个位置 (),交换相邻字符 和 。
你需要进行最少次数的此类操作,使得其中某一种字符(要么是 'a',要么是 'b')全部严格地聚在一起,形成恰好一个连续的区间块。另一种字符可以出现在该块之前或之后,形成至多两个(可能为空的)块。
允许的最终形式示例:
aaabbbaaa—— 所有b都在一个块中,a可在两边;bbbaaaaaabbb—— 所有a在一个块中,b在两端;aaaaabbbb或bbbbaaaaa—— 两种字符各自形成一个连续块。
求使上述目标成立所需的最少操作次数。
输入格式
多组测试用例。
第一行包含一个整数 ()——测试用例数。随后为 个测试用例。
每个测试用例包含两行:
- 第一行:整数 (),表示字符串长度。
- 第二行:字符串 ,长度为 ,仅包含字符
'a'和'b'。
保证所有测试用例中 的总和不超过 。
输出格式
对每个测试用例输出一行,包含一个整数 —— 使其中一种字符形成一个连续块所需的最少交换次数。
样例输入
5
4
abab
6
bababa
7
abababa
2
ab
1
b
样例输出
1
2
2
0
0
说明
样例解释
样例 :初始字符串 abab,交换位置 和 (得到 aabb),或交换位置 和 (得到 baab)均可在 次操作内使某一字符成块,因此最少为 。
样例 :字符串只有一个字符 b,已满足条件,所需操作为 。