CF2202B ABAB Construction
题目描述
有一个长度为 $n$ 的字符串 $T$,满足所有奇数位置 $T_i$ 都为 'a',所有偶数位置 $T_i$ 都为 'b'。
有一天,Bob 用如下算法生成了一个字符串 $S$:
1. 令 $S$ 为空字符串。
2. 从 $T$ 的首字母或尾字母中任选其一,取走并追加到 $S$ 的末尾。
3. 若 $T$ 为空,则结束并返回字符串 $S$。否则,返回步骤 2。
之后,Bob 将生成的字符串 $S$ 写在纸条上,若干年后他发现这张纸条已经磨损,甚至可能有人偷偷改动过其中一些字母。现在,Bob 想知道字符串是否被改动过!
你得到一个长度为 $n$ 的字符串 $X$,$X$ 只包含 'a'、'b' 和 '?'。
请你判断,是否存在一个字符串 $A$,使得满足以下条件:
- $|A|=n$;
- 每个 $A_i$ 只能为 'a' 或 'b';
- 对于 $1 \le i \le n$,若 $X_i$ 不是 '?',则 $A_i = X_i$;
- 字符串 $A$ 可以通过上述算法从字符串 $T$ 生成。
输入格式
每组测试数据包含多个测试用例。第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。
每个测试用例的第一行为一个整数 $n$($1 \le n \le 200\,000$)。
每个测试用例的第二行为一个长度为 $n$ 的字符串 $X$,只包含小写字母 'a'、'b' 和 '?'。
保证所有测试用例的 $n$ 之和不超过 $200\,000$。
输出格式
对于每个测试用例,如果存在满足条件的字符串 $A$,则输出一行 "YES"(不区分大小写)。
否则输出一行 "NO"。
说明/提示
对于第二个测试用例,字符串 "baaba" 无法通过上述算法生成。
对于第三个测试用例,字符串 "abaab" 可以通过上述算法生成:
1. 初始时,$T=$"ababa",$S$ 为空。
2. 移除 $T$ 的首字母,$T$ 变为 "baba",$S$ 变为 "a"。
3. 移除 $T$ 的首字母,$T$ 变为 "aba",$S$ 变为 "ab"。
4. 移除 $T$ 的尾字母,$T$ 变为 "ab",$S$ 变为 "aba"。
5. 移除 $T$ 的首字母,$T$ 变为 "b",$S$ 变为 "abaa"。
6. 移除 $T$ 的尾字母,$T$ 变为空,$S$ 变为 "abaab"。
由 ChatGPT 5 翻译