給定乙個只包括 『(』,』)』,』』,』[』,』]』 的字串,判斷字串是否有效。
有效字串需滿足:
1.左括號必須用相同型別的右括號閉合。
2.左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
示例1輸入: 「()」
輸出: true
示例2輸入: 「(){}」
輸出: true
示例3輸入: 「(]」
輸出: false
示例4輸入: 「([)]」
輸出: false
示例5輸入: 「」
輸出: true
這裡可以用到棧的特點:
class
solution
(object):
defisvalid
(self, s)
:"""
:type s: str
:rtype: bool
"""lis1=
["()",""
,"{}"
] lis2=
for i in s:
ifnot lis2 :
elif
(lis2[-1
]+i)
in lis1:
lis2.pop(
)else
:return lis2==
剛開始我沒有注意到空字元也可以為true,結果在前面還判斷了一下,畫蛇添足了。
還可以用字典的對應關係:
class
solution
:def
isvalid
(self, s:
str)
->
bool
: dic=',
'[':
']'}
lis1=
for i in s:
if lis1==
:elif dic.get(lis1[-1
])==i:
lis1.pop(
)else
:return lis1==
用字典的另一種思路:
class
solution
:def
isvalid
(self, s:
str)
->
bool
: match_dict=',
'[':
']',
'?':
'?'}
stack=
['?'
]for i in s:
elif match_dict[stack.pop()]
!=i:
return
false
return
len(stack)
==1
這種思路就是:如果出現右半個括號,可以加入到stack中,否則判斷 i 能不能和最後乙個右括號組成一對,能則順帶刪去右括號,否則返回false。若執行到最後,判斷是否已將所有右括號刪除乾淨。 leetcode 有效的括號
題目 給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 1.左括號必須用相同型別的右括號閉合。2.左括號必須以正確的順序閉合。示例1 輸入 輸出 true示例 2 輸入 輸出 true示例 3 輸入 輸出 false示例 4 輸入 輸出 false示例 5 輸入 輸出 true includ...
leetcode 有效的括號
給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true示例 2 輸入 輸出 true示例 3 輸入 輸出 false示例 4 輸入 輸出 false示例 5 輸入 輸出 tr...
LeetCode 有效的括號
給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 本題需使用棧來解決,即遍歷字串,遇到左括號...