問題描述:給定乙個字串的開始和結束括號,檢查它是否匹配。我們有三種型別的括號:圓括號:()、方括號:和花括號:{}。假設字串不包含除這些字元以外的任何其他字元,沒有空格、單詞或數字。提醒您,匹配括號要求以相反的順序開啟每個開口括號。例如,『()』是匹配的,而『([)]』則不是。
解題思路:
首先,我們將從左到右掃瞄字串,每次我們看到乙個開啟的括號,我們就把它推到堆疊中,因為我們希望首先關閉最後乙個開啟的括號。(記住堆疊的filo結構!)
然後,當我們看到乙個結束括號時,通過從堆疊中彈出乙個元素來檢查最後乙個開啟的括號是否是相應的結束匹配。如果這是乙個有效的匹配,那麼我們繼續前進,如果不返回false。
或者,如果堆疊是空的,我們也返回false,因為沒有與這個結束的括號相關聯的開始括號。最後,我們還檢查堆疊是否為空。如果是,我們返回true,否則返回false,因為有一些開啟的括號沒有關閉。
def
balance_check
(s):
# check is even number of brackets
iflen
(s)%2!=
0:return
false
# set of opening brackets
opening =
set(
'([')]
)# use a list as a "stack"
stack =
# check every parenthesis in string
for paren in s:
if paren in opening:
else
:# check that there are parentheses in stack
iflen
(stack)==0
:return
false
# check the last open parenthesis
last_open = stack.pop(
)# check if it has a closing match
if(last_open,paren)
notin matches:
return
false
return
len(stack)
==0
資料結構 佇列 雙端佇列
佇列 queue 是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。佇列是一種先進先出 first in first out 的線性表,簡稱fifo。允許插入的一端為隊尾,允許刪除的一端為對頭。佇列不允許在中間部位進行操作。假設佇列是q 那麼a1就是對頭元素,而an是隊尾元素。這樣我們就可...
資料結構 佇列 雙端佇列 小頂堆 大頂堆
queue 佇列 特點 先進先出 q.push num 從後面進佇列 q.pop 從前面出佇列 q.front 讀取佇列最前面的元素 q.back 讀取佇列最後面的元素 deque 雙端佇列 特點 兩端都可以出進 q.push front num 從前面進佇列 q.push back num 從後面...
資料結構 佇列 普通佇列和雙端佇列
佇列 queue 建立乙個空佇列 enqueue item 新增元素 dequeue 從佇列頭部刪除乙個元素 is empty 判斷乙個佇列是否為空 size 返回佇列的大小 class queue object 佇列 def init self self.items defis empty sel...