给你一个长度为 n 的字符串 s,其中仅包含字符 'A' 和 'B'。
你还获得了一个长度为 q 的二维整数数组 queries,其中每个 queries[i] 是以下形式之一:
[1, j]:反转 s 中下标为 j 的字符,即 'A' 变为 'B'(反之亦然)。此操作会修改 s 并影响后续查询。[2, l, r]:计算 使 子字符串 s[l..r] 变成 交替字符串 所需的 最小 字符删除数。此操作不会修改 s;s 的长度保持为 n。如果 子字符串 中不存在两个 相邻 字符 相等 的情况,则该子字符串是 交替字符串。长度为 1 的子字符串始终是交替字符串。
返回一个整数数组 answer,其中 answer[i] 是第 i 个类型为 [2, l, r] 的查询的结果。
示例 1:
输入:s = "ABA", queries = [[2,1,2],[1,1],[2,0,2]]
输出:[0,2]
解释:
i |
queries[i] |
j |
l |
r |
查询前的 s |
s[l..r] |
结果 | 答案 |
|---|---|---|---|---|---|---|---|---|
| 0 | [2, 1, 2] | - | 1 | 2 | "ABA" |
"BA" |
已经是交替字符串 | 0 |
| 1 | [1, 1] | 1 | - | - | "ABA" |
- | 将 s[1] 从 'B' 反转为 'A' |
- |
| 2 | [2, 0, 2] | - | 0 | 2 | "AAA" |
"AAA" |
删除任意两个 'A' 以得到 "A" |
2 |
因此,答案是 [0, 2]。
示例 2:
输入:s = "ABB", queries = [[2,0,2],[1,2],[2,0,2]]
输出:[1,0]
解释:
i |
queries[i] |
j |
l |
r |
查询前的 s |
s[l..r] |
结果 | 答案 |
|---|---|---|---|---|---|---|---|---|
| 0 | [2, 0, 2] | - | 0 | 2 | "ABB" |
"ABB" |
删除一个 'B' 以得到 "AB" |
1 |
| 1 | [1, 2] | 2 | - | - | "ABB" |
- | 将 s[2] 从 'B' 反转为 'A' |
- |
| 2 | [2, 0, 2] | - | 0 | 2 | "ABA" |
"ABA" |
已经是交替字符串 | 0 |
因此,答案是 [1, 0]。
示例 3:
输入:s = "BABA", queries = [[2,0,3],[1,1],[2,1,3]]
输出:[0,1]
解释:
i |
queries[i] |
j |
l |
r |
查询前的 s |
s[l..r] |
结果 | 答案 |
|---|---|---|---|---|---|---|---|---|
| 0 | [2, 0, 3] | - | 0 | 3 | "BABA" |
"BABA" |
已经是交替字符串 | 0 |
| 1 | [1, 1] | 1 | - | - | "BABA" |
- | 将 s[1] 从 'A' 反转为 'B' |
- |
| 2 | [2, 1, 3] | - | 1 | 3 | "BBBA" |
"BBA" |
删除一个 'B' 以得到 "BA" |
1 |
因此,答案是 [0, 1]。
提示:
1 <= n == s.length <= 105s[i] 要么是 'A',要么是 'B'。1 <= q == queries.length <= 105queries[i].length == 2 或 3
queries[i] == [1, j] 或queries[i] == [2, l, r]0 <= j <= n - 10 <= l <= r <= n - 1