CF1437B Reverse Binary Strings

题目描述

给定一个长度为 $n$ 的字符串 $s$,其中 $n$ 是偶数。字符串 $s$ 是二进制串,也就是说只包含 $0$ 和 $1$。 字符串 $s$ 恰好包含 $\frac{n}{2}$ 个 $0$ 和 $\frac{n}{2}$ 个 $1$($n$ 是偶数)。 每次操作,你可以翻转 $s$ 的任意一个子串。子串是字符串中一段连续的子序列。 你需要的最少操作次数是多少,才能将字符串 $s$ 变为交错字符串?如果对于所有 $i$,都有 $s_i \neq s_{i+1}$,则称字符串是交错的。一般来说,交错字符串有两种类型:01010101... 或 10101010...

输入格式

第一行包含一个整数 $t$($1 \le t \le 1000$),表示测试用例的数量。 每个测试用例的第一行包含一个整数 $n$($2 \le n \le 10^5$,$n$ 是偶数),表示字符串 $s$ 的长度。 每个测试用例的第二行包含一个长度为 $n$ 的二进制字符串 $s$($s_i \in \{0, 1\}$)。字符串 $s$ 恰好包含 $\frac{n}{2}$ 个 $0$ 和 $\frac{n}{2}$ 个 $1$。 保证所有测试用例中 $n$ 的总和不超过 $10^5$。

输出格式

对于每个测试用例,输出将 $s$ 变为交错字符串所需的最少操作次数。

说明/提示

在第一个测试用例中,字符串 10 已经是交错的。 在第二个测试用例中,例如可以翻转 $s$ 的最后两个字符,得到:0110 $\rightarrow$ 0101。 在第三个测试用例中,例如可以进行如下两次操作: 1. 11101000 $\rightarrow$ 10101100; 2. 10101100 $\rightarrow$ 10101010。 由 ChatGPT 4.1 翻译