棧的使用花樣百出,多棧會簡化很多問題給出乙個字串 s(僅含有小寫英文本母和括號)。
請你按照從括號內到外的順序,逐層反轉每對匹配括號中的字串,並返回最終的結果。
注意,您的結果中 不應 包含任何括號。
輸入:s =
"a(bcdefghijkl(mno)p)q"
輸出:"apmnolkjihgfedcbq"
充分發揮棧的相關資訊,棧尺寸(類似遞迴深度),棧底(類遞迴結束),棧頂(類遞迴入參)
python
class
solution
:def
reverseparentheses
(self, s:
str)
->
str:
m=st =
# 1.分層記錄括號索引
for i in
range
(len
(s))
:if st and s[i]
==")"
: top = st.pop()if
len(m.get(
len(st),[
]))==
0:m[
len(st)]=
[(top,i)
]else
: m[
len(st)
](top,i)
)if s[i]
=="("
:# 2.可變性原地翻轉
l =[x for x in s]
for nest in
range
(len
(m))[:
:-1]
:for v in m[nest]
: start,end = v[0]
,v[1
]while start < end:
l[start]
,l[end]
= l[end]
,l[start]
start+=
1 end -=
1# 3. 去括號還串
return
"".join(
[x for x in l if x.isalpha()]
)
注字典對映無序,因此需要根據鍵大小來訪問內容,以確保反轉順序由內而外
func
reverseparentheses
(s string
)string
for i:=
0;i<
len(s)
;i++
else
for stack[
len(stack)-1
]!=b[0]
stack = stack[
:len
(stack)-1
] stack =
(stack,tmp...)}
}return
string
(stack)
}
上述方案充分利用棧的方向性,不需要特點考慮反轉,出入棧特性自動消除括號。 反轉每對括號間的子串
問題描述 給出乙個字串 s 僅含有小寫英文本母和括號 請你按照從括號內到外的順序,逐層反轉每對匹配括號中的字串,並返回最終的結果。注意,您的結果中不應 包含任何括號。示例 1 輸入 s abcd 輸出 dcba 示例 2 輸入 s u love i 輸出 iloveu 示例 3 輸入 s ed et...
反轉每對括號裡的子串
給出乙個字串 s 僅含有小寫英文本母和括號 請你按照從括號內到外的順序,逐層反轉每對匹配括號中的字串,並返回最終的結果。注意,您的結果中 不應 包含任何括號。示例 1 輸入 s abcd 輸出 dcba 示例 2 輸入 s u love i 輸出 iloveu 示例 3 輸入 s ed et oc ...
8 反轉每對括號間的子串
問題描述 給出乙個字串 s 僅含有小寫英文本母和括號 請你按照從括號內到外的順序,逐層反轉每對匹配括號中的字串,並返回最終的結果。注意,您的結果中不應 包含任何括號。示例 1 輸入 s abcd 輸出 dcba 示例 2 輸入 s u love i 輸出 iloveu 示例 3 輸入 s ed et...