AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

K0056. 魔法森林中的符号路径

困难通过率 33% · 提交 114 · 通过 38
DFS字符串回溯

小慕正在开发一个魔法符文解析系统。系统中的符文以树状结构组织,每个节点用一个字母表示。小慕需要根据给定的目标符文序列,从根节点出发,找到所有到达叶子节点的路径中,能够匹配目标序列的最短路径。 树的结构由节点和层次关系组成,层次深度通过“|-”的数量表示。对于从根到叶子的某条路径,其连续节点构成的序列称为该路径的。例如,路径 `[D, A, B, C, G]` 可以提取出子路径 `[A, B, C, G]`,但 `[B, G, C]` 不是有效的子路径。 对于某个子路径,如果从中移除 n 个元素(n >= 0),且不改变剩余元素的相对顺序后,得到的新序列与目标序列完全相同,则称该子路径与目标序列匹配。 如果存在多条最短路径,小慕需要选择的那条;如果没有路径满足要求,则返回空路径 `NULL`。

提示:带虚线的词点一下有通俗解释。

输入描述

- 第一行输入一个整数 `n`,表示森林结构的深度优先遍历中的行数。 - 接下来的 `n` 行表示森林的结构(深度优先遍历的表示方式)。每一行中的节点由大写字母组成,层次关系用“|-”的数量表示。 - 最后一行输入目标路径,目标路径由大写字母组成,且长度不超过20。

输出描述

输出符合条件的最短路径(字典序最小)。如果找不到符合条件的路径,输出一个字符串`null`。

示例

示例 1

输入

9
D
|-A
|-|-B
|-|-|-C
|-|-|-|-G
|-|-|-|-|-F
|-|-C
|-|-|-A
|-|-|-|-G
ACG

输出

ABCG

示例 2

输入

16
Z
|-Z
|-|-D
|-|-|-B
|-|-|-|-Z
|-|-|-|-|-A
|-|-|-|-|-|-B
|-|-|-|-|-|-|-Z
|-|-|-|-|-|-|-|-C
|-|-|-|-|-|-|-|-|-B
|-A
|-|-A
|-|-|-B
|-|-|-|-C
|-|-|-|-|-D
|-|-|-|-|-|-B
ZBB

输出

ZABZCB

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
示例:目标序列 ACG,最短路径 ABCG D A B C G C A G 高亮路径:D → A → B → C → G 子路径 [A, B, C, G] 删除 A 得到 [B, C, G] 不匹配;删除 B 得到 [A, C, G] 匹配目标 ACG
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「魔法森林中的符号路径」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。