算法對(duì)程序員來說就是練習(xí)內(nèi)力,降龍十八掌也好,六脈神劍也好,你沒有很強(qiáng)的內(nèi)力,無法發(fā)揮武功的最大威力,如果你只是會(huì)花拳繡腿的話,遇到高手肯定被打趴下。這也就是為啥大廠都喜歡面試算法題!今天來看一道大廠經(jīng)常面試的算法題Python解法。'
有效的括號(hào)
判斷一個(gè)字符串中的大,中,小括號(hào)是否合法:
有效字符串需滿足:
左括號(hào)必須用相同類型的右括號(hào)閉合。
左括號(hào)必須以正確的順序閉合。
注意空字符串可被認(rèn)為是有效字符串。比如"( )","( )[ ]","( ( ( [ ] ) ) )"都是合法的,但是"( [ ) ]"就是不合法的。這道題是非常經(jīng)典的面試題,據(jù)說Facebook,微軟,Google,亞馬遜都考過這道題,只是加了一些變化而已。
目前為止最好的解法就是堆棧,比如我們判斷"( ( [ ] ) )"。思路就是壓棧,然后從棧頂進(jìn)行匹配,如果匹配成功比如左小括號(hào)遇到右小括號(hào),則把壓入棧的左小括號(hào)出棧,匹配成功,然后繼續(xù)下一個(gè)。

如果碰到"( [ ) ]",情況就不一樣了,左小括號(hào)進(jìn)棧,左中括號(hào)進(jìn)棧,右小括號(hào)和棧頂進(jìn)行匹對(duì),發(fā)現(xiàn)不匹配則失敗。

來看一下經(jīng)典的源碼:

這段代碼非常精煉,首先設(shè)計(jì)上 mapping 用右括號(hào)作為key,這樣的好處是當(dāng)你檢查字符串中如果不是右括號(hào)(那必然是左括號(hào))直接入棧,這樣寫非常簡(jiǎn)潔。
另外直接在elif 里面用stack.pop來循環(huán)拋出棧頂進(jìn)行匹配。最絕是直接not stack返回。如果stack為空則成功,否則失??!
大家可以好好體會(huì)一下,有空刷刷leetcode還是蠻好的!
在學(xué)習(xí)中有迷茫不知如何學(xué)習(xí)的朋友小編推薦一個(gè)學(xué)Python的學(xué)習(xí)裙[663033228]無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!