字串变换
题目描述
已知有两个字串 A, B 及一组字串变换的规则(至多 6 个规则):
A1→B1
A2→B2
...
规则的含义为:在 A 中的子串 A1 可以变换为 B1、A2 可以变换为 B2...。
变换规则
- 一次变换只能变换一个子串
- 如果字符串中有多个位置可以应用规则,只能选择其中一个位置进行变换
- 变换是单向的:只能从 Ai 变换为 Bi,不能反向变换
输入格式
输入格式如下:
A B
A1 B1
A2 B2
... ...
第一行是两个给定的字符串 A 和 B。
接下来若干行,每行描述一组字串变换的规则。
注意: 规则的数量不超过 6 个。
输出格式
若在 10 步(包含 10 步)以内能将 A 变换为 B,则输出最少的变换步数;否则输出 NO ANSWER!。
数据范围
所有字符串长度的上限为 20。
输入样例
abcd xyz
abc xu
ud y
y yz
输出样例
3
样例解释
初始字符串:A="abcd",目标字符串:B="xyz"
变换规则:
- "abc"→"xu"
- "ud"→"y"
- "y"→"yz"
变换过程:
- "abcd" 应用规则1:"abc"→"xu",得到 "xud"
- "xud" 应用规则2:"ud"→"y",得到 "xy"
- "xy" 应用规则3:"y"→"yz",得到 "xyz"
共进行了 3 次变换,使得 A 变换为 B。
注意事项
-
不能同时变换多个子串:例如,如果 A="aa",B="bb",规则为 "a"→"b",那么需要两步:
- 第一步:"aa"→"ba"(变换第一个a)
- 第二步:"ba"→"bb"(变换第二个a)
-
规则可能产生空字符串:规则中的 Bi 可以是空字符串(表示删除子串 Ai)
-
规则可能使字符串变长或变短
-
10步限制:如果超过10步才能变换到目标字符串,则输出 NO ANSWER!
时空限制