【Leetcode | easy】有效的括号
生活随笔
收集整理的這篇文章主要介紹了
【Leetcode | easy】有效的括号
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
給定一個只包括 '(',')','{','}','[',']' 的字符串,判斷字符串是否有效。
有效字符串需滿足:
注意空字符串可被認為是有效字符串。
示例 1:
輸入: “()”
輸出: true
示例 2:
輸入: “()[]{}”
輸出: true
示例 3:
輸入: “(]”
輸出: false
示例 4:
輸入: “([)]”
輸出: false
示例 5:
輸入: “{[]}”
輸出: true
思路
空字符串可被認為是有效字符串;
而對于非空字符串,被判斷為有效字符串的條件是括號都按相應順序和類別互相匹配。因此,可以利用一個先進后出的棧,保存左括號的順序和類別,從而按順序進行左右括號兩兩配對,以判斷括號的有效性。
算法描述如下:
a. 若此時棧為空,則不符合括號閉合順序,判定為無效的括號,跳到操作8
b. 若棧不為空,且當前棧頂元素為右括號對應的左括號,配對成功,將該左括號移出棧
c. 若棧不為空,且當前棧頂元素不是右括號對應的左括號,則配對不成功,判定為無效的括號,跳到操作8
解答
class Solution:def isValid(self, s):""":type s: str:rtype: bool"""d1 = { ')':'(', '}':'{', ']':'['}d2 = {'(': 1, ')': -1, '{': 1, '}': -1, '[': 1, ']': -1}stack = []isValid = Falsei = 0while i < len(s):if d2[s[i]] == -1:if stack == []:breakelif d1[s[i]] == stack[-1]:stack.pop()else:breakif d2[s[i]] == 1:stack.append(s[i])i+=1;if i == len(s) and stack == []:isValid = Truereturn isValid總結
以上是生活随笔為你收集整理的【Leetcode | easy】有效的括号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Leetcode | easy】最长公
- 下一篇: 【统计学习方法】决策树