力扣刷題 32 最長有效括號

2021-10-04 23:55:53 字數 1049 閱讀 4688

給定乙個只包含 『(』 和 『)』 的字串,找出最長的包含有效括號的子串的長度。

動態規劃初步

動態規劃可以理解為是一種遞迴的思想,當前的狀態可以由之前已知的狀態推導過來 ,用數學表示即:f(x)可以由f(x-1)或者f(x-2)的某種關係得到。

一般來講,目標是求什麼則什麼即為狀態,然後分析當前狀態和之前狀態的推導關係,進而進行窮舉所有狀態即可。

解題思路

用dp[i]表示以i位置字元結尾的最長有效括號的字串長度,初始化所有狀態為0。

若nums[i] = 『(』,即以左括號結尾的字串肯定有效括號長度為0;

若nums[i] = 『)』,即右括號結尾可能為有效括號字串,有效匹配有兩種情況:

①:和緊挨的前乙個位置的左括號匹配,則dp[i] = dp[i-2]+2。

②:隔了一段有效括號長度的前乙個位置匹配,則dp[i] = dp[i-1]+2+dp[i-dp[i-1]-2]+2

如下圖:

**示例

class

solution

else

else

dp[i]=2

+ dp[i-1]

;}}}

} resault = resault > dp[i]

? resault: dp[i];}

return resault;}}

;

其他解法

具體到本題還可以用棧(stack)來實現,棧是一種先進後出的資料結構。將元素下標入棧,棧底永遠為當前可以匹配字串的前乙個位置。遇左括號入棧,右括號則出棧,動態更新當前元素座標和棧頂元素距離並取最大值即可,本文主要為討論動態規劃的解法,本方法不再詳細敘述**。

力扣32 最長有效括號

32.最長有效括號 給定乙個只包含 和 的字串,找出最長的包含有效括號的子串的長度。示例 1 輸入 輸出 2 解釋 最長有效括號子串為 示例 2 輸入 輸出 4 解釋 最長有效括號子串為 這是道困難題,看到了括號,我第一想到的就是棧,因為對於匹配括號的題,棧這種資料結構是非常好用的。其次最長有效,這...

力扣 32 最長有效括號 思維 棧

思路一 初始置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 an...

LeetCode刷題筆記 32 最長有效括號

題目 給定乙個只包含 和 的字串,找出最長的包含有效括號的子串的長度。示例 1 輸入 輸出 2 解釋 最長有效括號子串為 示例 2 輸入 輸出 4 解釋 最長有效括號子串為 題解 定義乙個 dp 陣列,其中第 i 個元素表示以下標為 i 的字元結尾的最長有效子字串的長度。可知dp 0 0,且位置處字...