題目
給定一個只包括 '(',')','{','}','[',']' 的字符串,判斷字符串是否有效。有效字符串需滿足以下要求:
1,左括號必須用相同類型的右括號閉合。
2,左括號必須以正確的順序閉合。
3,注意空字符串可被認為是有效字符串。
例如,"{[{()}]()}"就是一個閉合的有效字符串。
實現思路
這里我們運用 棧
里面 先進后出
的思想來處理問題。
- 遍歷字符串中的每一個括號
- 定義一個空列表,如果遇到左括號,就存儲到列表中
- 如果遇到右括號,判斷列表是否為空,不為空就彈出列表中最后一個左括號,並判斷右括號和彈出的左括號是否匹配,不匹配則返回 False
- 如果遇到右括號,且列表為空,那么也就表示列表中沒有匹配的括號,則直接返回 False
- 遍歷結束,最后再判斷列表是否為空,不為空則表示左/右括號有多余的,返回 False ; 為空則表示是閉合的有效字符串,返回 True
代碼實現
def demo(s):
stack = []
for i in s:
if i == "(" or i == "[" or i == "{":
stack.append(i)
elif i == ")":
if len(stack) == 0 or stack.pop() != "(":
return False
elif i == "]":
if len(stack) == 0 or stack.pop() != "[":
return False
elif i == "}":
if len(stack) == 0 or stack.pop() != "{":
return False
return True if len(stack) == 0 else False
res1 = demo("{[{()}]()}")
print(res1 == True)
res2 = demo("{}())))[]")
print(res2 == False)
res3 = demo("")
print(res3 == True)