在Python中扩展用n(t)格式表示的字符串的程序

在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

  • 返回连接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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程