在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
- 如果c等于“(”,则
-
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