在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:一个新的列表
-
while i < size of s and s[i] is not same as “)”, do
- if s[i] is a digit, then
- d:=0
-
while s[i] is digit, do
-
d := 10 * d + s[i]的整数部分
-
i := i + 1
-
i := i + 1
-
segment := parse()
-
i := i + 1
-
将段插入到结果中d次
-
否则,
- 在ans中插入s[i]的末尾
-
i := i + 1
- if s[i] is a digit, then
-
返回连接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