LeetCode 有效的括號

有效的括號


題目來源:https://leetcode-cn.com/problems/valid-parentheses/python

題目


給定一個只包括 '(',')','{','}','[',']' 的字符串,判斷字符串是否有效。segmentfault

有效字符串需知足:微信

  1. 左括號必須用相同類型的右括號閉合。
  2. 左括號必須以正確的順序閉合。

注意空字符串可被認爲是有效字符串。app

示例 1:spa

輸入: "()"
輸出: true

示例 2:code

輸入: "()[]{}"
輸出: true

示例 3:blog

輸入: "(]"
輸出: false

示例 4:leetcode

輸入: "([)]"
輸出: false

示例 5:字符串

輸入: "{[]}"
輸出: true

解題思路


  1. 思路:棧;
  2. 對括號進行映射,右括號爲鍵,左括號爲值;
  3. 若是遇到左括號,直接將其入棧。等待後面匹配處理;
  4. 若是遇到右括號,檢查棧頂的元素。如果同類型則彈出繼續處理接下的部分。不然,直接返回 False;
  5. 若是最終遍歷完成後,棧中還有元素,一樣返回 False。

代碼實現


class Solution:
    def isValid(self, s: str) -> bool:
        '''判斷是不是有效的括號

        Args:
            str: 包含括號的字符串
        
        Returns:
            返回判斷的結果,知足條件:
                1. 左括號必須用相同的類型的右括號閉合。
                2. 左括號必須以正確的順序閉合。
            空字符串能夠被認爲是有效的字符串
            返回類型爲布爾型
        '''
        # 以棧形式存儲左括號
        stack = []

        # 以右括號當成鍵映射對應類型的左括號
        prths_mapping = {'}': '{', ']': '[', ')': '('}

        # 遍歷字符串,遇左括號則進行入棧
        for ch in s:
            # 對字符進行判斷,是否爲右括號
            if ch in prths_mapping:
                # 爲右括號的狀況下,判斷 stack 棧頂是不是同類型的左括號
                # pop 出棧頂的字符
                # 若 stack 爲空,用 '?' 進行標記
                pop_prth = stack.pop() if stack else '?'

                # 若是左右括號不成對,直接返回 False
                if prths_mapping[ch] != pop_prth:
                    return False
            else:  # 左括號入棧
                stack.append(ch)
        # stack 最終爲空,則表示爲有效
        return not stack

實現效果


valid_prts_result_1.jpg
valid_prts_result_details_1.png


以上就是本篇的主要內容get


歡迎關注微信公衆號《書集所錄》
相關文章
相關標籤/搜索