題目來源:
題目分析:
[][][] TRUE
((([]))) TRUE
((([]{}))) TRUE
([{}]) TRUE
([{[][]}]) TRUE
]}]) FALSE
(((( FALSE
)()()( FALSE
那麼以 輸入字符串((([])))爲例子。
第1-3步循環,stack入棧三個左圓括號(, 當前棧頂爲左圓括號
第4步循環,stack入棧左方括號[, 當前棧頂爲左方括號,棧中元素爲1個左方括號。
第5步循環,發現了右方括號,正好和當前棧頂的左方括號[ 滿足左右配對,於是彈棧,當前棧頂又變回左圓括號,棧中元素爲3個左圓括號。
第6步循環,發現了右圓括號,正好和當前棧頂的左圓括號( 滿足左右配對,於是彈棧,當前棧頂依然保持左圓括號,棧中元素爲2個左圓括號。
第7步循環,發現了右圓括號,正好和當前棧頂的左圓括號( 滿足左右配對,於是彈棧,當前棧頂依然保持左圓括號,棧中元素爲1個左圓括號。
第8步循環,發現了右圓括號,正好和當前棧頂的左圓括號( 滿足左右配對,於是彈棧,棧中元素爲0。
輸入字符串的循環體遍歷完畢,此時檢查stack爲空,所以爲返回true。
實現代碼:
class Solution:
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
sta=[None]
dic={")":"(","}":"{","]":"["}
for t in s:
if(t in dic and dic[t]==sta[len(sta)-1]):
sta.pop()
else:
sta.append(t)
return len(sta) == 1
在python中,我們使用列表來表示堆棧,使用.pop()和.append(x)方法來實現入棧和出棧的操作。這裏需要注意的一點是,我們在設置堆棧的時候,並沒有將其設置爲空列表[],而是[None],這麼做的原因是在後面的式子裏有減一的操作,而len([])=0;len([None])=1,因此我們需要設置成這樣。