编写一个程序(通过标准输入或命令行)以递归形式接收字符串
PREFIX[SUFFIXES]
哪里
PREFIX
可以是任何小写字母(az)字符串,包括空字符串,并且SUFFIXES
可以是递归形式PREFIX[SUFFIXES]
连接在一起的任何字符串序列,包括空序列。
通过递归求值每个后缀中的字符串列表并将它们附加到前缀,从输入生成一个小写字母字符串列表。输出以任何顺序输出此列表中的字符串,每行一个(加上可选的尾随换行符)。
例
如果输入是
cat[s[up[][]][]ch[e[r[]s[]]]a[maran[]comb[]pult[[]ing[]]]]
那么前缀是
cat
和和后缀s[up[][]]
,[]
,ch[e[r[]s[]]]
,和a[maran[]comb[]pult[[]ing[]]]
。每个后缀都有自己的前缀和后缀。输出将是任意顺序的这9个字
catsup cats cat catcher catches catamaran catacomb catapult catapulting
因为输入对这棵树进行了编码
通过从根到叶遍历树可以形成9个输出字中的每一个。
笔记
请记住,前缀可能是空字符串,所以类似
[donut[][]cruller[]]
是有效输入,其输出将是(任何顺序)
donut cruller
空行用于第二个后缀匹配的空字符串。
后缀序列也可以为空,因此平凡的输入大小写
[]
有一个空行作为其输出:
- 您可以假设输入将仅产生唯一的输出字。
- 例如
hat[s[]ter[]s[]]
将是无效的输入,因为它hats
被编码了两次。 - 同样,
[[][]]
无效,因为空字符串被编码两次。
- 例如
- 您可能不会假定输入尽可能短或压缩。
- 例如,
'e'
上面主要示例中的'ch'
节点可以与该节点组合,但这并不意味着输入无效。 - 同样,
[[[[[]]]]]
尽管仅对空字符串进行了次优编码,但仍然有效。
- 例如,
- 代替程序,您可以编写一个函数,该函数将输入字符串作为参数并正常打印输出或将其作为字符串或列表返回。
以字节为单位的最短代码获胜。