題目描述:
給定乙個只包括 '(',')','','[',']' 的字串,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
示例 1:
輸入: "()"
輸出: true
示例 2:
輸入: "(){}"
輸出: true
示例 3:
輸入: "(]"
輸出: false
示例 4:
輸入: "([)]"
輸出: false
示例 5:
輸入: ""
輸出: true
我的方法:
最初的想法是對的,用堆疊處理。處理流程如下:
遍歷字串,從首個字元開始壓入堆疊,然後比對堆疊最上面的字元和剩餘字串的首個字元。
如果相等,堆疊彈出最上面的字元,剩餘陣列丟棄首個字元。
如果不相等,則繼續將剩餘字串壓入堆疊。
剩餘字串為空時,迴圈結束。
此時若堆疊為空,則該字串有效。
否則,為無效。
該方法的效果還可以:執行用時 : 32 ms, 在valid parentheses的python提交中擊敗了30.51% 的使用者。記憶體消耗 : 10.8 mb, 在valid parentheses的python提交中擊敗了2.24% 的使用者。
class solution(object):
def isvalid(self, s):
""":type s: str
:rtype: bool
"""stack=
d=':1,'(':2,')':2}
while s:
# 如果相等,堆疊彈出最上面的字元,剩餘陣列丟棄首個字元
if len(stack)>0 and d[stack[-1]]==d[s[0]] and stack[-1]!=s[0]:
stack.pop()
s=s[1:]
# 否則,將s的首字元壓入堆疊
else:
s=s[1:]
if stack==:
return true
else:
return false
一點改進:
class solution(object):
def isvalid(self, s):
""":type s: str
:rtype: bool
"""stack=
d=','}':'
while s:
# 如果相等,堆疊彈出最上面的字元,剩餘陣列丟棄首個字元
if len(stack)>0 and d[stack[-1]]==s[0]:
stack.pop()
s=s[1:]
# 否則,將s的首字元壓入堆疊
else:
s=s[1:]
if stack==:
return true
else:
return false
別人的方法:
基本的思想是一樣的,也是用堆疊。具體步驟如下:
用d記錄右括號對應的左括號的雜湊表。
遍歷字串s。
如果當前字元c為右括號,且該右括號與堆疊stk頂端字元stk[-1]相對應,則彈出stk頂端字元。
如果當前字元c為右括號,但未與stk頂端字元stk[-1]相對應,則返回false。
如果當前字元c為左括號,則壓入stk。
遍歷完成後,若stk依然為空,則s合法。否則,不合法。
這個方法較優的一點在於:在某些情況下,不必遍歷完就能夠判定是否合法字串。例如:一開始就有乙個右括號,則必然不合法。因此,理論上應該會執行得快一點。
class solution:
def isvalid(self, s):
d = ': '
stk = [' '] # 堆疊
for c in s:
c2 = d.get(c, '')
# stk[-1]也就是堆疊最上面的字元
if stk[-1] == c2:
stk.pop()
# c2非空且未配對,則返回錯誤
elif c2:
return false
# c2為空,則表明是左括號,壓入堆疊
else:
return len(stk) == 1
LeetCode20有效括號
給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true示例 2 輸入 輸出 true示例 3 輸入 輸出 false示例 4 輸入 輸出 false示例 5 輸入 輸出 tr...
Leetcode 20 有效括號
leetcode 20 給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true pthon 列表 如 a a b 字典 如 dict not ...
leetcode 20 有效括號
怎麼減少if語句,判斷是否是某乙個值,將值存進map中,是否在map中,若在,則是 匹配用map 給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出...