給定乙個只包括'('
,')'
,''
,'['
,']'
的字串,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
示例 1:
輸入: "()"
輸出: true
示例 2:
輸入: "(){}"
輸出: true
示例 3:
輸入: "(]"
輸出: false
示例 4:
輸入: "([)]"
輸出: false
示例 5:
輸入: ""
輸出: true
思路:
如果字串長度為奇數,則一定存在無效括號;
為方便處理,將括號對映為方便處理的數字,使對應括號之和恆定;
將給定字串使用對映表轉換為對應數字列表;
定義乙個棧,遍歷2中得到的列表,當棧為空時,從列表彈出最後乙個元素,壓入棧頂;如果棧不為空,判斷棧頂元素與列表末尾元素是否為成對括號(此處通過判斷兩元素之和判斷),若是成對括號,則彈出棧頂元素,彈出列表末尾元素,若不為成對括號,彈出列表末尾元素,將其壓入棧頂;
列表遍歷完成後,判斷棧是否為空,若為空則說明所有括號均合法,否則不合法。
class solution():
def isvaild(self,s):
if len(s)%2==1:
return false
chr=dict(zip([''],[x for x in range(6)]))
chr2=
temp=
for x in s:
while chr2:
if temp:
if temp[-1]+chr2[-1]==5:
temp.pop()
chr2.pop()
else:
else:
if temp:
return false
return true
try1=solution()
s='{}'
print(try1.isvaild(s))
class solution
//用棧儲存 (,[,:',' else ,那麼就要跟棧中的元素比較
//首先要判斷棧是否為空,如果輸入的字元是 )() ,那麼當遍歷到第乙個)時,棧為空
if(stack.size()==0)
//取出棧頂的元素
character tmp = stack.pop();
//假設當前遍歷到的元素是 ],那麼從map中取到的value就是 [
//如果棧頂的元素是 (,則不匹配返回false,否則繼續
if(map.get(c)!=tmp)
}} //返回的時候還要判斷棧是否為空
//如果輸入的字串是 (((,那麼最後棧就不為空
return (stack.empty()? true : false);
}}
Leetcode 20 有效括號
leetcode 20 給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true pthon 列表 如 a a b 字典 如 dict not ...
leetcode 20 有效括號
怎麼減少if語句,判斷是否是某乙個值,將值存進map中,是否在map中,若在,則是 匹配用map 給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出...
leetcode 20 有效括號
有效的括號 給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 ...