給定乙個只包括 『(』,』)』,』』,』[』,』]』 的字串,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
示例1:
輸入:
"()"
輸出: true
示例2:輸入:
"(){}"
輸出: true
示例3:輸入:
"(]"
輸出: false
示例4:輸入:
"([)]"
輸出: false
示例5:輸入:
""輸出: true
利用棧的特性,對字串逐字元判斷。符合條件的字串滿足以下特點:
個數是偶數
最右邊的一定是右括號
在逐個判斷過程中,前後兩個要麼是同向括號,要麼是成對括號。
**如下:
class
solution
:def
isvalid
(self, s:
str)
->
bool
: s =
list
(s) help_s =
left_bracket =
right_bracket =',
']',
')'}
left_right_bracked =')
}if(len
(s)%2!=
0):print
('false'
)return
false
else
:while s:
last_s = s.pop()if
len(help_s)==0
:if last_s in left_bracket:
return
false
elif last_s in right_bracket:
elif last_s in left_bracket:
last_help_s = help_s.pop()if
(last_s,last_help_s)
in left_right_bracked:
continue
else
:print
('false'
)return
false
print
('true'
)return
true
solution = solution(
)solution.isvalid(
']')
測試結果:
對上述**進行改進,主要就是改變括號的判別過程。可以考慮採用字典的形式代替集合。
**如下:
class
solution
:def
isvalid
(self, s:
str)
->
bool
: help_s =
left_right_bracked ='}
for i in s:
if i in left_right_bracked:
else
:if help_s and left_right_bracked[help_s.pop()]
== i:
continue
else
:return
false
return
not help_s
這道題就是應用棧的特點解題,值得思考的是改進**中用字典代替集合的做法,簡單明瞭高效。字典和集合在in語句上的時間複雜度都為o(1) python資料結構與演算法
coding utf 8 import sys 使用以下語句將引數的str格式轉換為int格式 l list map int sys.argv 1 split target int sys.argv 2 def binarysearch print l print target left 0 rig...
資料結構與演算法 python
元類 基礎 冒泡 它重複地走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端,故名氣泡排序。def bubble sort alist ...
python演算法與資料結構
若n1 n2 n3 1000,且n1平方 n2平方 n3平方 n1,n2,n3為自然數 求出所有n1 n2 n3可能的組合?n1 0 n2 0 n3 0 判斷n1 n2 n3是否等於1000,之後變n3 1,n3 2,n3 3,然後再變n2 那如果變為 n1 n2 n3 2000 了呢?思路1 實現...