給定一個僅包含字元 '('
, ')'
, '{'
, '}'
, '['
和 ']'
的字串 s
,確定輸入字串是否有效。
輸入字串在以下情況下有效:
範例 1:
Input: s = "()"
Output: true
範例 2:
Input: s = "()[]{}"
Output: true
範例 3:
Input: s = "(]"
Output: false
範例 4:
Input: s = "([)]"
Output: false
範例 5:
Input: s = "([])"
Output: true
此問題的核心在於檢查括號的匹配情況,適合使用 堆疊(Stack) 資料結構來模擬括號的開啟和閉合過程。當遍歷字串時:
實現步驟
程式碼實現 (Python)
class Solution:
def isValid(self, s: str) -> bool:
# 定義匹配關係的字典
matching = {')': '(', '}': '{', ']': '['}
stack = []
for char in s:
# 如果是右括號,檢查堆疊頂部是否匹配
if char in matching:
if stack and stack[-1] == matching[char]:
stack.pop() # 匹配成功,彈出堆疊頂部
else:
return False # 匹配失敗
else:
# 如果是左括號,壓入堆疊
stack.append(char)
# 最後檢查堆疊是否為空
return not stack
時間與空間複雜度
n
是字串的長度,因為每個字元最多只會被處理一次。思路
與解法一類似,但通過提前檢查和縮減堆疊操作次數進行小幅度優化。
程式碼實現 (Python)
class Solution:
def isValid(self, s: str) -> bool:
# 定義匹配關係
matching = {')': '(', '}': '{', ']': '['}
stack = []
for char in s:
# 如果是右括號且匹配失敗,直接返回 False
if char in matching and (not stack or stack[-1] != matching[char]):
return False
elif char in matching:
stack.pop() # 匹配成功,彈出堆疊頂部
else:
stack.append(char) # 左括號壓入堆疊
# 如果堆疊為空,表示匹配成功
return not stack
時間與空間複雜度
該問題中,堆疊法是一個經典解法,這個題目經常被用於考察對堆疊的理解與操作熟練度。熟練掌握後,可應用於類似的問題,如處理 HTML 標籤匹配、數學運算中的括號匹配等情境。