目錄
問題
給定一個只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判斷字符串是否有效。
有效字符串需滿足:
- 左括號必須用相同類型的右括號閉合。
- 左括號必須以正確的順序閉合。
注意空字符串可被認爲是有效字符串。
示例 1:
輸入: "()"
輸出: true
示例 2:
輸入: "()[]{}"
輸出: true
示例 3:
輸入: "(]"
輸出: false
示例 4:
輸入: "([)]"
輸出: false
示例 5:
輸入: "{[]}"
輸出: true
解題思路
分析:這也是一道比較簡單的題目,具體就類似堆棧:在入棧前判斷棧中最後一個元素和當前元素是否配對,配對就彈出棧中元素,循環遍歷一遍字符串後,如果棧不爲空,則字符串無效。
注意:
1)就是如果字符串長度是奇數,則必然無效。
2)配對的括號,建立字典時的鍵值關係。具體參考代碼:
python具體實現
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
sLen = len(s)
bracketStack = []
bracketDict = {')':'(','}':'{',']':'['}
flag = True
if sLen%2 ==1:
flag = False
else:
for i in range(sLen):
if len(bracketStack) <1:
bracketStack.append(s[i])
elif s[i] in ['(','{','[']:
bracketStack.append(s[i])
elif bracketStack[-1]==bracketDict[s[i]]:
bracketStack = bracketStack[:-1]
if bracketStack != []:
flag = False
return flag
題外記
對堆棧的操作,太少,知道其含義,但是出入棧的操作,不是用的棧的操作方式,實現的棧的含義。