LeetCode | 20 . 有效的括號(Python3)

題目鏈接:https://leetcode-cn.com/problems/valid-parentheses/
問題描述:

給定一個只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判斷字符串是否有效。
有效字符串需滿足:
左括號必須用相同類型的右括號閉合。
左括號必須以正確的順序閉合。
注意空字符串可被認爲是有效字符串。

示例:

1:
輸入: “()”
輸出: true
2:
輸入: “()[]{}”
輸出: true
3:
輸入: “(]”
輸出: false

實現思路:

1:遍歷括號序列,遇到左括號就進棧等待匹配;若遇到右括號,此時先判斷棧是否空,如果棧空則匹配失敗,返回False,若棧不空則彈出棧頂元素與之匹配,若匹配失敗則返回False,匹配成功則重複以上操作。最終遍歷完成後若棧空則代表該括號序列是有效的,返回True, 反之則返回False。
2:在Python中可以利用list(列表)來模擬棧,list.append(),list.pop()分別代表入棧和出棧。然後還需要定義怎樣纔算匹配,很輕易能想到的是可以判斷一對待匹配的左右括號是否在[ ‘()’, ‘[]’, ‘{}’]中。但在這可以利用dict(字典)的鍵值映射關係來代替。
3: 定義字典 : pre_dict = {’)’:’(’, ‘}’:’{’,’]’:’[’ } , 這樣左括號在字典的值中pre_dict.values() --> ‘(’, ‘[’, ‘{’,右括號在字典的鍵中pre_dict.keys() --> ‘)’, ‘]’, ‘}’。
4: 比如’{ }‘的匹配過程如下:首先進來的是’{’,爲左括號入棧stack.append(’ { ‘),stack = [ ’ { ’ ],接着進來’}’,爲右括號且stack不爲空,故彈出棧頂元素’ { ‘進行匹配,可以發現pre_dict[’}’] == stack.pop() --> ‘{’ == ‘{’,成功匹配。最後匹配工作已經完成且stack爲空,故’ { } '是一組有效的括號。

Python代碼:

class Solution:
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        pre_dict = {')': '(', ']': '[', '}': '{'}
        stack = []
        for i in s:
            if i in pre_dict.values():  # 表明i爲左括號,入棧
                stack.append(i)
        # i爲右括號,若此時棧空(not stack)或者與出棧的不匹配則
        # 匹配出錯 ,return False
            elif not stack or pre_dict[i] != stack.pop():
                return False
        return not stack  # 若結束時棧空則return True,反之return False

運行結果:
結語:剛寫文章不久,主要是記錄一些學習總結,也是自己的一個愛好吧,希望能一直堅持下去,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章