Leetcode DP3 最長(zhǎng)合法括號(hào)

題目

Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.

示例1:

Input: "(()"
Output: 2
Explanation: The longest valid parentheses substring is "()"

示例2:

Input: ")()(()()())())"
Output: 12
Explanation: The longest valid parentheses substring is "()(()()())()"

問題分解

  1. subproblem:每一個(gè)合法括號(hào)子串都是一個(gè)subproblem奕枢,計(jì)算每一個(gè)合法括號(hào)子串的長(zhǎng)度即可破喻。

  2. guess:
    '(' 到下一個(gè)點(diǎn)去拥坛,因?yàn)榭傆蟹椒苁乖?('屬于最長(zhǎng)合法括號(hào)里面。
    ')' 前面的是'('限煞,合法(一種情況)。前面的是')',則看看前面還有等待結(jié)束的'('振劳,有的話就合法,沒有的不合法油狂。

  3. related:用個(gè)table記錄下合法子串開始位置到第i處之前的括號(hào)的狀況(subproblem)历恐。此外還要記錄最長(zhǎng)長(zhǎng)度,也就是每次不合法了专筷,就要刷新一次最長(zhǎng)長(zhǎng)度弱贼。

  4. bottom up

  5. solve the original problem

代碼實(shí)現(xiàn)

class Solution {
public:
  int longestValidParentheses(string s) {
        int len = s.length(); 
        if(len<1)   return 0; 
        vector<int > table(len+1,0);//初始化一個(gè)table,初始值為0
        int cnt = 0; //cnt就是計(jì)數(shù)用的磷蛹,記錄有多少個(gè)'('等待結(jié)束
        if(s[0]=='(')   cnt++;// cnt =1
        else    cnt --; //cnt=-1
        int retMax = 0;
        for(int i=1;i<len;i++){
            if(s[i]=='('){
                if(cnt<0)   cnt=1;
                else    cnt++;
                continue;
            }
            //為')'的情況吮旅。
            cnt--;//一個(gè)'('被結(jié)束了,cnt-=1
            if(cnt>=0){ //cnt>=0的話味咳,就說明前面都是合法的子串庇勃,<0的話在下一個(gè)i處會(huì)進(jìn)行cnt重置。
                if(s[i-1]=='(') table[i+1] = table[i-1]+2; 
                else{
                    if(s[i-1-table[i]]=='(')
                        table[i+1] = table[i-1-table[i]]+2+table[i];//
                }
                if(retMax<table[i+1])   retMax = table[i+1];
            }
        }
        return retMax;
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末莺葫,一起剝皮案震驚了整個(gè)濱河市匪凉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捺檬,老刑警劉巖再层,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異堡纬,居然都是意外死亡聂受,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門烤镐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛋济,“玉大人,你說我怎么就攤上這事炮叶⊥肼茫” “怎么了渡处?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)祟辟。 經(jīng)常有香客問我医瘫,道長(zhǎng),這世上最難降的妖魔是什么旧困? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任醇份,我火速辦了婚禮,結(jié)果婚禮上吼具,老公的妹妹穿的比我還像新娘僚纷。我一直安慰自己,他們只是感情好拗盒,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布怖竭。 她就那樣靜靜地躺著,像睡著了一般陡蝇。 火紅的嫁衣襯著肌膚如雪侵状。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天毅整,我揣著相機(jī)與錄音,去河邊找鬼绽左。 笑死悼嫉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拼窥。 我是一名探鬼主播戏蔑,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼鲁纠!你這毒婦竟也來了总棵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤改含,失蹤者是張志新(化名)和其女友劉穎情龄,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捍壤,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骤视,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鹃觉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片专酗。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖盗扇,靈堂內(nèi)的尸體忽然破棺而出祷肯,到底是詐尸還是另有隱情沉填,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布佑笋,位于F島的核電站翼闹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏允青。R本人自食惡果不足惜橄碾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望颠锉。 院中可真熱鬧法牲,春花似錦、人聲如沸琼掠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓷蛙。三九已至悼瓮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間艰猬,已是汗流浹背横堡。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冠桃,地道東北人命贴。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像食听,于是被迫代替她去往敵國(guó)和親胸蛛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

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