编程题
### 问题描述 小然最近在练习一种二进制魔术,他有一个由 0 和 1 组成的二进制字符串 $S$。 他可以进行以下操作: - 选择一个子串 $S_{L...R} (1 \leq L \leq R \leq |S|)$,这个子串中的元素是非递减排列的,然后移除这个子串。移除后,字符串的左右两部分会自动连接在一起。 例如,如果 $S = 100011000$,我们可以执行以下操作:$100011000 \rightarrow 100000$,即移除字串 $011$。 小然的目标是通过最少的操作次数,使得最后的二进制字符串 $S$ 是非递减的。 现在,他需要你的帮助,来确定最少的操作次数。 ### 输入格式 输入的第一行包含一个整数 $T$,表示测试用例的数量。 每个测试用例由两行组成: - 第一行包含一个整数 $N$,表示二进制字符串的长度。 - 第二行包含一个长度为 $N$ 的二进制字符串,由 0 和 1 组成。 ### 输出格式 对于每个测试用例,输出一行一个整数,表示使最后的二进制字符串非递减所需的最少操作次数。 ### 样例输入 ```text 3 3 000 5 01110 2 10 ``` ### 样例输出 ```text 0 1 1 ``` ### 说明 在第一个测试用例中,二进制字符串已经是非递减的,所以不需要进行操作。 在第二个测试用例中,我们可以进行一次操作,移除子串 $111$。这样,剩下的字符串 $00$ 是非递减的。 在第三个测试用例中,我们可以进行一次操作,移除子串 $0$。这样,剩下的字符串 $1$ 是非递减的。 ### 评测数据范围 $1 \leq T \leq 10^3$。 $1 \leq N \leq 10^5$。 所有测试用例中 $N$ 的总和不超过 $2 \times 10^5$。
查看答案
赣ICP备20007335号-2