在Python中反转括号包含的子字符串的程序

在Python中反转括号包含的子字符串的程序

假设我们有一个包含字母和括号“(”和“)”的小写字符串s。我们需要以递归的方式反转每个括号内的字符串并返回结果字符串。

因此,如果输入为s =“ back(aps)ce”,则输出将为“ backspace”。

为解决此问题,我们将执行以下步骤:

  • 定义一个函数trav()。这将获取s,dir,start,close:= close,ans:= ans
    • end:=“(”(如果dir与-1相同,则为-1),否则为“)”

    • other:=“(”(如果end与“)”相同,则为“)”,否则为“(”)

    • 当启动时小于s的大小,并且s [start]与结束不相同时,执行以下操作:

      • 如果s [start]与other相同,则

      • trav(s,-dir,close [other,start] – dir )

      • start:= close [other,start] + dir

      • 否则,

      • 在答案末尾插入s [start]

      • start:= start + dir

  • 从主函数作如下操作−

  • 答案:=新列表

  • close:=使用键“)”和“(”的新映射,最初值为两个空映射

  • 堆栈:=新列表

  • 对于s中的每个索引I和值c,执行以下操作

    • 如果c等于“(”,则
      • 将i推入栈中
    • 否则,当c等于“)”时,则
      • o:=堆栈顶部,然后从堆栈中弹出

      • close [ )” ,i ]:= o

      • close [ (” ,o ]:= i

  • trav(s,1,0)

  • 返回以空字符串连接的答案

让我们看一下以下实现,以便更好地理解−

示例

class Solution:
   def solve(self, s):
      ans = []
      close = {")": {}, "(": {}}
      stack = []
      for i, c in enumerate(s):
         if c == "(":
            stack.append(i)
         elif c == ")":
            o = stack.pop()
            close [ ”)”,i ]:= o
            close [“(”,o]:= i
      def trav(s,dir,start,close = close,ans = ans):
         end =“(”(如果dir == -1,则为 -1 否则为“)”
         other =“(”(如果end == “)”相同,则为“)”,否则为“(”)
         while start < len(s) and s[start] != end:
            if s[start] == other:
               trav(s,-dir,close[other][start] - dir)
               start = close[other][start] + dir
            else:
               ans.append(s[start])
               start += dir
      trav(s,1,0)
      return "" .join(ans)

ob = Solution()
print(ob.solve("back(aps)ce"))

输入

"back(aps)ce"

输出

backspace

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程