CF2241C RemovevomeR

题目描述

给定一个只包含字符 $\texttt{0}$ 和 $\texttt{1}$ 的二进制字符串 $s$。 你可以进行如下操作任意多次(也可以一次都不进行): - 选择 $s$ 的一个回文子串(长度至少为 $2$)。 - 从选中的这个回文子串中恰好删除一个字符。 剩余的字符串会连成新的 $s$。 请你求出经过任意多次上述操作后,字符串 $s$ 的最小可能长度。 $^*$ 字符串 $a$ 是字符串 $b$ 的子串,指的是可以通过从 $b$ 的开头和末尾删除若干(也可以为零或者全部)字符得到 $a$。 $^\dagger$ 长度为 $m$ 的字符串 $a$ 被称为回文串,当且仅当对于所有 $1 \le i \le m$,都有 $a_i = a_{m + 1 - i}$。

输入格式

第一行包含一个整数 $t$($1 \le t \le 100$),表示测试用例的个数。每个测试用例的描述如下: 每个测试用例的第一行包含一个整数 $n$($1 \le n \le 100$),表示二进制字符串 $s$ 的长度。 第二行包含长度为 $n$ 的二进制字符串 $s$,保证字符串中每个字符都是 $\texttt{0}$ 或 $\texttt{1}$。

输出格式

对于每个测试用例,输出经过任意多次上述操作后 $s$ 的最小可能长度。

说明/提示

在第一个测试用例中,初始字符串为 $\texttt{0000}$。可以进行如下操作: - 选择回文子串 $\texttt{0000}$,删除一个 $\texttt{0}$,剩下 $\texttt{000}$。 - 选择回文子串 $\texttt{000}$,删除一个 $\texttt{0}$,剩下 $\texttt{00}$。 - 选择回文子串 $\texttt{00}$,删除一个 $\texttt{0}$,剩下 $\texttt{0}$。 字符串 $\texttt{0}$ 不包含长度至少为 2 的回文子串,因此无法继续操作。最小可能长度为 $1$。 在第二个测试用例中,初始字符串为 $\texttt{110}$。 - 选择回文子串 $\texttt{11}$,删除一个 $\texttt{1}$,剩下 $\texttt{10}$。 字符串 $\texttt{10}$ 不包含长度至少为 2 的回文子串,因此无法继续操作。最小可能长度为 $2$。 由 ChatGPT 5 翻译