SP8056 AMR10B - Regex Edit Distance
题目描述
在这道题目中,我们使用正则表达式来描述一组字符串。题目限定的字母表是 'a' 和 'b'。一个正则表达式 $R$ 满足以下任一条件时即为合法:
1. $R$ 为 "a" 或 "b"
2. $R$ 可以写成 "(R1R2)" 形式,其中 R1 和 R2 都是正则表达式
3. $R$ 可以写成 "(R1|R2)" 形式,其中 R1 和 R2 都是正则表达式
4. $R$ 可以写成 "(R1*)" 形式,其中 R1 是正则表达式
识别的字符串集合由 $R$ 描述如下:
1. 当 $R$ 为 "a" 时,识别的字符串集合为 {a}
2. 当 $R$ 为 "b" 时,识别的字符串集合为 {b}
3. 若 $R$ 的形式是 "(R1R2)",识别的字符串集合是所有能由 R1 识别的字符串 s1 和由 R2 识别的字符串 s2 连同起来得到的字符串
4. 若 $R$ 的形式是 "(R1|R2)",识别的字符串集合是 R1 和 R2 识别集合的并集
5. 若 $R$ 的形式是 "(R1\*)" ,识别的字符串集合包括空字符串以及任意多个 R1 识别的字符串连接起来得到的字符串
字符串 s1 和 s2 之间的编辑距离是指将 s1 通过最少的字符插入、删除或替换操作变成 s2 所需的步数。
给定两个正则表达式 $R1$ 和 $R2$,求在所有由 $R1$ 识别的字符串 s1 和由 $R2$ 识别的字符串 s2 之间的最小编辑距离。
输入格式
第一行输入一个整数 $T$,表示测试用例的数量。接下来是 $T$ 个测试用例。
每个测试用例由两行组成,分别包含一个正则表达式 $R1$ 和 $R2$。每个测试用例之间用一个空行分隔。
输出格式
输出 $T$ 行,每行对应一个测试用例的最小编辑距离。
说明/提示
- $T \leq 100$
- $1 \leq \text{length}(R1), \text{length}(R2) \leq 50$
- 保证 $R1$ 和 $R2$ 完全符合题目给出的定义。
**样例输入**
```
2
((a|b)*)
(a(b(aa)))
(a((ab)*))
(a(b(((ab)b)b)))
```
**样例输出**
```
0
2
```
**解释**
- 对于第一个测试用例,$R1$ 能识别所有由 'a' 和 'b' 组成的字符串,因此它也识别字符串 "abaa",这个字符串同样被 $R2$ 识别。
- 对于第二个测试用例,字符串 "aababab" 和 "ababbb" 分别被 $R1$ 和 $R2$ 识别,而它们之间的编辑距离为 2。
**本翻译由 AI 自动生成**