思路一:初始置cur
=ct=
0cur=ct=0
cur=ct
=0,如果遇到(
((,就令cur
、ctcur、ct
cur、ct
自增,否則令cur
curcu
r自減,ctct
ct自增,那麼當cur
=0cur=0
cur=
0時說明當前子串匹配了,我們可以令ans
=max
(ans
,ct)
ans=max(ans,ct)
ans=ma
x(an
s,ct
),但是當cur
<
0cur<0
cur<
0時說明當前子串已經沒有意義了,所以需要把cur
、ctcur、ct
cur、ct
都置為0
00。但是這樣處理不了(((
)((()
((()
這樣的情況,所以還需要反著處理一遍。
class
solution
cur=ct=0;
for(
int i=siz-
1;i>=
0;i--
)return ans;}}
;
思路二:用棧來實現,把每個(
((的下標壓進去,當碰到)
))的時候,通過下標之差計算答案。但是像()(
)()()
()()
這種情況就很難處理,我們考慮初始時加入乙個−1-1
−1作為邊界,先彈出棧頂,再計算差值,這樣也能得到正確答案。需要注意的是,如果彈出棧頂後棧為空,說明在這一步之前的括號已經完成匹配了,所以這個時候不能計算貢獻,應該把當前座標i
ii壓進去作為新的邊界。
class
solution
}return ans;}}
;
力扣32 最長有效括號
32.最長有效括號 給定乙個只包含 和 的字串,找出最長的包含有效括號的子串的長度。示例 1 輸入 輸出 2 解釋 最長有效括號子串為 示例 2 輸入 輸出 4 解釋 最長有效括號子串為 這是道困難題,看到了括號,我第一想到的就是棧,因為對於匹配括號的題,棧這種資料結構是非常好用的。其次最長有效,這...
力扣刷題 32 最長有效括號
給定乙個只包含 和 的字串,找出最長的包含有效括號的子串的長度。動態規劃初步 動態規劃可以理解為是一種遞迴的思想,當前的狀態可以由之前已知的狀態推導過來 用數學表示即 f x 可以由f x 1 或者f x 2 的某種關係得到。一般來講,目標是求什麼則什麼即為狀態,然後分析當前狀態和之前狀態的推導關係...
32 最長有效括號 (棧)
給定乙個只包含 和 的字串,找出最長的包含有效括號的子串的長度。示例 1 輸入 輸出 2 解釋 最長有效括號子串為 示例 2 輸入 輸出 4 解釋 最長有效括號子串為 困難 題意是找到最長的連續有效括號 如s 有效的連續括號只有 答案應該是2.一開始理解錯了,以為是要求所有有效括號的總長度。分析 利...