Leetcode 20 有效的括號

2021-09-19 06:42:09 字數 2335 閱讀 7311

題目描述:

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

有效字串需滿足:

左括號必須用相同型別的右括號閉合。

左括號必須以正確的順序閉合。

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

示例 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 輸入 輸出...