leetcode第三十二題 —— 最長(zhǎng)有效括號(hào)

1.題目

原題:

給定一個(gè)只包含 '(' 和 ')' 的字符串甥雕,找出最長(zhǎng)的包含有效括號(hào)的子串的長(zhǎng)度贬堵。

例子:

輸入: "(()"
輸出: 2
解釋: 最長(zhǎng)有效括號(hào)子串為 "()"

2.解析

這道題可以好好盤一盤我的心路歷程招驴,里邊全是坑腹鹉,大家注意避著點(diǎn)。
先來說正確解法:棧和動(dòng)態(tài)規(guī)劃怔蚌。
棧是這次考慮的重點(diǎn)巩步,動(dòng)態(tài)規(guī)劃以后有空再補(bǔ)充。

2.1 我的錯(cuò)誤做法

當(dāng)時(shí)我思考的棧解決問題桦踊,但是我考慮的太復(fù)雜了渗钉,甚至加了雙指針。

  • 疑點(diǎn)1钞钙,為啥不用雙指針
    答:棧本來就是動(dòng)態(tài)的鳄橘,可以不斷地入棧、出棧芒炼,本來就可以記錄下標(biāo)位置瘫怜。
  • 疑點(diǎn)2,用for循環(huán)還是while循環(huán)
    答:其實(shí)都可以本刽,for循環(huán)和while循環(huán)一層就可以了鲸湃,不用考慮正確匹配的開始位置可能是第一個(gè)也能是第n個(gè),因?yàn)闂子寓?梢杂涗浵滤蟹蠗l件的括號(hào)集合暗挑。
  • 疑點(diǎn)3,什么時(shí)候進(jìn)行有效括號(hào)的計(jì)算
    答:遇到左括號(hào)就入棧斜友,這個(gè)是肯定的炸裆,因?yàn)橹灰亲罄ㄌ?hào),就可能有有效匹配鲜屏,因此計(jì)算只能出在右括號(hào)里烹看。
    右括號(hào)也分情況:
  • 第一種是棧空了洛史,注意這個(gè)椆呤猓空了的意思是沒有左括號(hào)可以和這個(gè)右括號(hào)匹配,這個(gè)時(shí)候觀察一下也殖,i - start和當(dāng)前最大有效括號(hào)lk(下面簡(jiǎn)稱lk了)之間的最大值就是此次的lk土思。
    這里的小疑點(diǎn),為啥是i- start?因?yàn)橛行У钠ヅ湮恢檬莍-1己儒,思考一下這個(gè))括號(hào)不是有效的匹配崎岂,有效的匹配只到前一個(gè)位置,計(jì)算從開始位置到有效位置有多少位址愿,i - 1 - start + 1(1到7有幾個(gè)數(shù)该镣?7-1+1 =7對(duì)不對(duì))冻璃,就是i-start响谓。這個(gè)完事之后咱從下一位開始匹配,更新一下start省艳。
  • 第二種是棧沒空娘纷,到此位置還是有效的,然后我們需要pop掉一個(gè)元素跋炕。pop完了又出問題了赖晶,棧空了辐烂,棧沒空遏插。(楊宗緯《我變了,我沒變》)
    假設(shè)椌佬蓿空了胳嘲,你能咋辦,匹配完了唄扣草,算一下幾個(gè)括號(hào)了牛,i - start + 1,這個(gè)不想解釋了辰妙,參考上面的說法吧鹰祸。
    假設(shè)棧沒空,哎沒匹配完密浑,有效的有幾個(gè)啊蛙婴,注意哦當(dāng)前i位置是有效的,然后前面pop掉一個(gè)i - (stack[-1] + 1) +1 尔破,嗯算完了i - stack[-1]敬锐。stack是啥,你們覺得是啥呆瞻,當(dāng)然是左括號(hào)對(duì)應(yīng)的下標(biāo)啊台夺。

2.2 正確做法

做出這道題總共分三步:
第一步,整個(gè)循環(huán)痴脾,遍歷輸入字符串颤介。
第二步,設(shè)置一個(gè)start,隨時(shí)更新著滚朵,設(shè)置一個(gè)stack冤灾,記錄下左括號(hào)的下標(biāo)。
第三步辕近,開始操作韵吨,按照上一節(jié)的疑點(diǎn)3操作,對(duì)著代碼看移宅,可能更清楚一點(diǎn)归粉。

3.python代碼

class Solution:
    def longestValidParentheses(self, s):
        nlen = len(s)
        i = 0
        new_stack = []
        lk = 0
        start = 0
        if nlen <= 1:
            return 0
        while i < nlen:
            # print(i)
            # print(new_stack)
            # print('start', start)
            if s[i] == '(':
                new_stack.append(i)
            else:
                if new_stack:
                    new_stack.pop()
                    if new_stack == []:
                        lk = max(lk, i - start + 1)
                    else:
                        # print(2)
                        lk = max(lk, i - new_stack[-1])
                else:
                    lk = max(lk, i - start)
                    start = i + 1
            i += 1
        return lk
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市漏峰,隨后出現(xiàn)的幾起案子糠悼,更是在濱河造成了極大的恐慌,老刑警劉巖浅乔,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倔喂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡靖苇,警方通過查閱死者的電腦和手機(jī)席噩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贤壁,“玉大人悼枢,你說我怎么就攤上這事⌒驹遥” “怎么了萧芙?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)假丧。 經(jīng)常有香客問我双揪,道長(zhǎng),這世上最難降的妖魔是什么包帚? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任渔期,我火速辦了婚禮,結(jié)果婚禮上渴邦,老公的妹妹穿的比我還像新娘疯趟。我一直安慰自己,他們只是感情好谋梭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布信峻。 她就那樣靜靜地躺著,像睡著了一般瓮床。 火紅的嫁衣襯著肌膚如雪盹舞。 梳的紋絲不亂的頭發(fā)上产镐,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音踢步,去河邊找鬼癣亚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛获印,可吹牛的內(nèi)容都是我干的述雾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼兼丰,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼玻孟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起地粪,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤取募,失蹤者是張志新(化名)和其女友劉穎琐谤,沒想到半個(gè)月后蟆技,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡斗忌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年质礼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片织阳。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡眶蕉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出唧躲,到底是詐尸還是另有隱情造挽,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布弄痹,位于F島的核電站饭入,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏肛真。R本人自食惡果不足惜谐丢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蚓让。 院中可真熱鬧乾忱,春花似錦、人聲如沸历极。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)趟卸。三九已至蹄葱,卻和暖如春纲酗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背新蟆。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工觅赊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人琼稻。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓吮螺,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親帕翻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鸠补,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 思路1:這個(gè)序列問題,很容易聯(lián)想到用動(dòng)態(tài)規(guī)劃的思路來解最長(zhǎng)公共字符串的問題嘀掸,區(qū)別在于紫岩,在求最長(zhǎng)公共字符串的時(shí)候,子...
    閆品品閱讀 796評(píng)論 0 0
  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,798評(píng)論 0 38
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,383評(píng)論 0 5
  • 一只無名小鳥朝我看了一眼睬塌,“吱”的一聲向天飛去泉蝌。小鳥飛去,此時(shí)已去揩晴,小鳥帶著時(shí)間走了勋陪。我們的日子隨著一只又...
    冰夫閱讀 218評(píng)論 0 0
  • 大家正在埋頭辦公。 新婚的小王老師晃進(jìn)來硫兰,隨手把一袋散裝餅干放在辦公桌上诅愚,大咧咧地來了句:“給媳婦買了點(diǎn)餅干〗儆常” ...
    只有真誠(chéng)閱讀 282評(píng)論 3 5