11.有效的括號-Leetcode 020(python)
阿新 • • 發佈:2018-12-14
- 題目描述
給定一個只包括 '(',')','{','}','[',']' 的字串,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。 左括號必須以正確的順序閉合。 注意空字串可被認為是有效字串。
- 示例
示例 1:
輸入: "()" 輸出: true 示例 2:
輸入: "()[]{}" 輸出: true 示例 3:
輸入: "(]" 輸出: false
- 解決方案
本想自己解決,但是用了一堆if else的判斷最後把自己都快搞瘋掉也不能AC,看了網上的解決方案,意識到自己的問題在於老想著用最笨的方法去遍歷記錄,對資料結構的理解、掌握和應用不到位,效率低,效果差。
參考的解決方案使用的思路是用棧的資料結構來解決,如果當前字元是左括號,則直接放入棧中,如果是右括號,那麼就判斷此時棧裡的字元是否是與之對應的左括號,如果不是的話則返回False,要注意如果此時棧是空的,也是返回False。
另外需要注意的是有可能會出現字串中只有左括號的情況,棧不為空,但是返回的是False。一開始做的時候沒有考慮到這個,報錯了。
- 程式碼
class Solution: def isValid(self, s): """ :type s: str :rtype: bool """ l = len(s) if l ==0 : return True #如果字元個數為奇數,直接返回False elif l%2 ==1: return False d = {'(':')','[':']','{':'}'} #棧 stack = [] for i in s: #如果當前字元為左括號,則直接加入棧中 if i in d: stack.append(i) #如果當前字元為右括號 else: if not stack: return False else: #判斷當前棧中是否有與當前右括號相匹配的左括號 if d[stack.pop()] != i: return False #之所以判斷棧此時是否為空,是要考慮字串是'(('的情況 if stack == []: return True else: return False