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次,使得輸入的字串恰好乙個合法的括號序列。每按一次左括號 字串末尾追加乙個左括號 每按一次右括號 字串末尾追加乙個右括號 每按一次退格鍵 會刪掉字串的最後乙個字元,特別的,如果字串為空,牛牛也可以按退格,但是什麼都不會發生。輸出...