棧的春天 反轉每對括號的子串

2021-10-09 10:40:32 字數 1690 閱讀 2925

棧的使用花樣百出,多棧會簡化很多問題

給出乙個字串 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...