一道經(jīng)典的算法題|細(xì)細(xì)拆解

算法對(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ù)資料分享!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,503評(píng)論 0 13
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,695評(píng)論 0 5
  • 2018.2.21 星期二 天氣晴 親子日記二十一 今天我們都去探望孩子的姑姑,因?yàn)殡x的近,我?guī)氁踩ダ玻?..
    留下一杯金黃的陽光閱讀 222評(píng)論 0 0
  • 文|若杉 01 朋友一臉挫敗地問我:“究竟什么時(shí)候才能學(xué)會(huì)自律?” 我被突如其來的提問,弄得有些摸不著頭腦,問她:...
    若杉閱讀 449評(píng)論 1 1
  • 午睡起來,胖子感冒了不想去訓(xùn)練,給輔導(dǎo)員打電話請(qǐng)假在寢室休息并說不想去醫(yī)院,^_^輔導(dǎo)員是非常負(fù)責(zé)的^_^說待...
    顧勰閱讀 123評(píng)論 1 1

友情鏈接更多精彩內(nèi)容