最長合法括號序列

2022-08-04 19:57:17 字數 914 閱讀 3634

description

如果乙個括號序列插入"+"和"1"後,可以得到乙個正確的數學表示式,那麼它被稱為"合法"的。例如,序列"(())(

)","()"和"(()(()))"是合法的,但")(","(()"和"(()))("不是合法的。 給出乙個由"("和")"字元組成的字串

。你要找出它最長的是合法括號序列的子串,也同樣要找出最長子串的個數。100%的資料:讀入的字串長度小於

等於10^6

input

output

sample input

)()()(

sample output

4 1sol:棧+dp

f[i]表示到位置i能夠形成的最長合法括號序列的子串的長度。

依次處理讀入的字串序列,如果字元為「(」,進棧,如果是「)」,則與棧頂的左括號配對。

如i為正在處理右括號,棧頂為k(k>0),則f[i]=f[k-1]+i-k+1.

最後掃一遍,求出所有能形成的最大子串長度及個數。

**如下:

#include #include 

#include

#include

using

namespace

std;

const

int n=1000005;

intn,tot;

intf[n],q[n];

char

s[n];

void

init()

void

dp()}

void

out()

}if (ans==0) cnt=1

; printf(

"%d %d\n

",ans,cnt);}

intmain()

最長合法括號序列 棧(括號題)

這是另一道處理合法括號序列的題目。我們應該提醒你,如果乙個括號序列插入 和 1 後,可以得到乙個正 確的數學表示式,那麼它被稱為 合法 的。例如,序列 和 是合法的,但 和 不是。給出乙個由 和 字元組成的字串。你要找出它最長的是合法括號序列的子串,也同樣要找出最長子串的個數。括號題容易想到棧,把左...

最長合法括號

給乙個只由 和 組成的字串,找出其中最長的連續合法子串長度。leetcode input output 2 input output 4 input output 4很明顯,可以用動態規劃,我也是這麼想的。構建dp len len dp i j 表示以i開頭,j結尾的子串中最長子串。s表示字串,然後...

合法括號序列

合法括號序列 鍵盤上有左括號 右括號 和退格鍵 共三個鍵。牛牛希望按鍵n次,使得輸入的字串恰好乙個合法的括號序列。每按一次左括號 字串末尾追加乙個左括號 每按一次右括號 字串末尾追加乙個右括號 每按一次退格鍵 會刪掉字串的最後乙個字元,特別的,如果字串為空,牛牛也可以按退格,但是什麼都不會發生。輸出...