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

更新时间: 2020-12-23

299 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告