Python 中实现字符串展开(n(t) 格式)的程序
假设我们有一个字符串 s,它编码了一个更长的字符串。s 表示为 n(t) 的连接,n(t) 表示 t 连接 n 次,t 可以是普通字符串,也可以是另一个递归编码的字符串。我们需要找到 s 的解码版本。
因此,如果输入类似于 s = "3(pi)2(3(am))0(f)1(u)",则输出将为 "pipipiamamamamamamu"
为了解决这个问题,我们将遵循以下步骤:
i := 0
定义一个函数 parse()。它将接收
ans := 一个新的列表
当 i < s 的大小且 s[i] 不等于 ")" 时,执行以下操作:
如果 s[i] 是数字,则:
d := 0
当 s[i] 是数字时,执行以下操作:
d := 10 * d + s[i] 的整数部分
i := i + 1
i := i + 1
segment := parse()
i := i + 1
将 segment 插入 ans 中 d 次
否则:
将 s[i] 插入到 ans 的末尾
i := i + 1
返回连接 ans 中所有元素后的字符串
在主方法中返回 parse()
示例
让我们看看以下实现以更好地理解:
class Solution: def solve(self, s): i = 0 def parse(): nonlocal i ans = [] while i < len(s) and s[i] != ")": if s[i].isdigit(): d = 0 while s[i].isdigit(): d = 10 * d + int(s[i]) i += 1 i += 1 segment = parse() i += 1 ans.extend(segment for _ in range(d)) else: ans.append(s[i]) i += 1 return "".join(ans) return parse() ob = Solution() s = "3(pi)2(3(am))0(f)1(u)" print(ob.solve(s))
输入
"3(pi)2(3(am))0(f)1(u)"
输出
pipipiamamamamamamu
广告