一道經典的Python演算法題|細細拆解
阿新 • • 發佈:2018-11-25
新建Python軟體開發測試技術交友群QQ:952490269(加群備註software)
今天來看一道大廠經常面試的演算法題Python解法。
有效的括號
判斷一個字串中的大,中,小括號是否合法:
有效字串需滿足:
-
左括號必須用相同型別的右括號閉合。
-
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。比如"( )","( )[ ]","( ( ( [ ] ) ) )"都是合法的,但是"( [ ) ]"就是不合法的。這道題是非常經典的面試題,據說Facebook,微軟,Google,亞馬遜都考過這道題,只是加了一些變化而已。
目前為止最好的解法就是堆疊,比如我們判斷"( ( [ ] ) )"。思路就是壓棧,然後從棧頂進行匹配,如果匹配成功比如左小括號遇到右小括號,則把壓入棧的左小括號出棧,匹配成功,然後繼續下一個。
如果碰到"( [ ) ]",情況就不一樣了,左小括號進棧,左中括號進棧,右小括號和棧頂進行匹對,發現不匹配則失敗。
來看一下經典的原始碼:
這段程式碼非常精煉,首先設計上 mapping 用右括號作為key,這樣的好處是當你檢查字串中如果不是右括號(那必然是左括號)直接入棧,這樣寫非常簡潔。
另外直接在elif 裡面用stack.pop來迴圈丟擲棧頂進行匹配。最絕是直接not stack返回。如果stack為空則成功,否則失敗!
大家可以好好體會一下,有空刷刷leetcode還是蠻好的!