20. Valid Parentheses 有效的括號

2020-08-14 11:06:36

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

有效字串需滿足:

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

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

範例 1:

輸入: "()"
輸出: true

範例 2:

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

範例 3:

輸入: "(]"
輸出: false

範例 4:

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

範例 5:

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

括號匹配嘛,最近點的棧問題。

Code

	def isValid(self, s: str) -> bool:
		if len(s) % 2 != 0:
			return False

		stack = []
		for c in list(s):
			if c in ['(', '[', '{']:
				stack.append(c)
			elif c == ')' and (len(stack) == 0 or stack.pop() != '('):
				return False
			elif c == ']' and (len(stack) == 0 or stack.pop() != '['):
				return False
			elif c == '}' and (len(stack) == 0 or stack.pop() != '{'):
				return False
		return len(stack) == 0

複雜度分析

  • 時間複雜度:O(n)O(n)O(n),其中 nnn 是字串 sss 的長度。

  • 空間複雜度:O(n+∣Σ∣)O(n + |\Sigma|)O(n+Σ),其中 Σ\SigmaΣ 表示字元集,本題中字串只包含 666 種括號,∣Σ∣=6|\Sigma| = 6Σ=6。棧中的字元數量爲 O(n)O(n)O(n),而雜湊對映使用的空間爲 O(∣Σ∣)O(|\Sigma|)O(Σ),相加即可得到總空間複雜度。

Alex 007 CSDN認證部落格專家 機器學習 NLP TensorFlow
我是 Alex 007,一個熱愛計算機程式設計和硬體設計的小白。
爲啥是007呢?因爲叫 Alex 的人太多了,再加上每天007的生活,Alex 007就誕生了。
如果你喜歡我的文章的話,給個三連吧!