1. 程式人生 > >一道經典的Python演算法題|細細拆解

一道經典的Python演算法題|細細拆解

新建Python軟體開發測試技術交友群QQ:952490269(加群備註software)

今天來看一道大廠經常面試的演算法題Python解法。

 

有效的括號

判斷一個字串中的大,中,小括號是否合法:

有效字串需滿足:

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

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

注意空字串可被認為是有效字串。比如"( )","( )[ ]","( ( ( [ ] ) ) )"都是合法的,但是"( [ ) ]"就是不合法的。這道題是非常經典的面試題,據說Facebook,微軟,Google,亞馬遜都考過這道題,只是加了一些變化而已。

 

目前為止最好的解法就是堆疊,比如我們判斷"( ( [ ] ) )"。思路就是壓棧,然後從棧頂進行匹配,如果匹配成功比如左小括號遇到右小括號,則把壓入棧的左小括號出棧,匹配成功,然後繼續下一個。

 

 

如果碰到"( [ ) ]",情況就不一樣了,左小括號進棧,左中括號進棧,右小括號和棧頂進行匹對,發現不匹配則失敗。

 

來看一下經典的原始碼:

 

這段程式碼非常精煉,首先設計上 mapping 用右括號作為key,這樣的好處是當你檢查字串中如果不是右括號(那必然是左括號)直接入棧,這樣寫非常簡潔。

另外直接在elif 裡面用stack.pop來迴圈丟擲棧頂進行匹配。最絕是直接not stack返回。如果stack為空則成功,否則失敗!

大家可以好好體會一下,有空刷刷leetcode還是蠻好的!

https://leetcode.com/