LeetCode 20 _ 有效的括號
阿新 • • 發佈:2020-10-07
1. 題目描述
2. 程式碼
1 class Solution: 2 def isValid(self, s: str) -> bool: 3 n = len(s)#獲取字串的長度 4 if n == 0:#如果長度為0,則表示空串,本題認為是合法的串 5 return True 6 if n % 2 == 1:#如果是奇數個括號,則必然不合法 7 return False 8 stack = []#定義一個列表用來模擬棧 9 forc in s:#迴圈字串中的每個字元 10 if c == '(' or c == '{' or c == '[':#如果是左括號 11 stack.append(c)#直接入棧 12 elif c == ')':#如果是右括號 13 if len(stack) > 0:#棧不為空 14 if stack[-1] == '(':#棧頂元素是對應的左括號 15 stack.pop(-1)#目前合法,則將棧頂出棧16 else: 17 stack.append(')')#棧頂元素無法匹配,則當前右括號入棧 18 else:#棧為空,則無法匹配 19 return False 20 elif c == '}': 21 if len(stack) > 0: 22 if stack[-1] == '{': 23 stack.pop(-1)24 else: 25 stack.append('}') 26 else: 27 return False 28 elif c == ']': 29 if len(stack) > 0: 30 if stack[-1] == '[': 31 stack.pop(-1) 32 else: 33 stack.append(']') 34 else: 35 return False 36 if len(stack) == 0:#如果棧可以左右都匹配(成對消除) 37 return True#則是合法串 38 else: 39 return False
思路:
1.左右匹配, 就相當於1進1出, 最後棧的長度為0, 返回真.
2. 如果都不匹配, 就都入棧, 最後棧的長度不等於0, 返回false.
3.如果是示例5, 就是先 { 和 [ 入棧, 然後第3個 ] 的時候匹配了棧的-1個元素, 所以就移除, 最後一個 } 也是同樣的道理.
3.整理
3.1 列表
1 list1 = ['Google', 'Runoob', 1997, 2000] 2 list2 = [1, 2, 3, 4, 5 ] 3 list3 = ["a", "b", "c", "d"] 4 list4 = ['red', 'green', 'blue', 'yellow', 'white', 'black']
3.2 元組
1 tup1 = ('Google', 'Runoob', 1997, 2000)