Python實現資料結構與演算法 有效的括號

2021-10-03 13:14:54 字數 2120 閱讀 5338

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

有效字串需滿足:

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

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

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

示例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 實現...