最長有效括號

2021-09-29 17:38:25 字數 1337 閱讀 5517

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

輸入: 「(()」

輸出: 2

解釋: 最長有效括號子串為 「()」

輸入: 「)()())」

輸出: 4

解釋: 最長有效括號子串為 「()()」

用陣列dp[i]表示括號串s[i]結尾的最大括號字串長度。

當 s[ i ] 是』 ( '時, dp[i]一定為0。

當s[ i ]為『 ) 『時,判斷s[i-1]是否為『( 』

s[i-1]==』(』:

則dp[i] = dp[i-2]+2 (i-2)>=0。dp[i]=2, (i-2)<0。

s[i-1]!=』('

此時判斷s[i-1-dp[i-1]] 是否為』(』

類似於 (()()), s[i-1-dp[i-1]]其實就是s[i]前面第乙個不在有效子串中的括號

應注意需要[i-1-dp[i-1]>=0

如果s[i-1-dp[i-1]]==』 ( 』

dp[i] = dp[i-1]+2 +dp[i-1-dp[i-1]-1] ; (i-1-dp[i-1]-1)>0

dp[i] = dp[i-1]+2 ; (i-1-dp[i-1]-1)<=0

類似於 ()(()())最後乙個在4的基礎上+2後應該加上最前面的兩個, 所以 在s[i-1]的基礎上加2後 應該加上dp[i-1dp[i-1]-1] 。

其它情況下dp[i]=0;

if(s[i]='(')

dp[i] = 0;

else

else

else

dp [i]=0;

}}

package dp;

/*最長有效括號

*/public

class

l32else

else

}else}}

max = max>dp[i]

?max:dp[i];}

return max;

}public

static

void

main

(string[

] args)

}

最長有效括號

leedcode32 給定乙個只包含 和 的字串,找出最長的包含有效括號的子串的長度。示例 1 輸入 輸出 2解釋 最長有效括號子串為 示例 2 輸入 輸出 4解釋 最長有效括號子串為 思路 首先生成乙個長度和s一樣的陣列dp,dp i 表示以i結尾的字元的最長有效括號子串長度。顯然dp 0 0 假...

最長有效括號

給定乙個只包含 和 的字串,找出最長的包含有效括號的子串的長度。示例 1 輸入 輸出 2解釋 最長有效括號子串為 示例 2 輸入 輸出 4解釋 最長有效括號子串為 思路 解法1 借助棧 借助棧來求解,需要定義個start變數來記錄合法括號串的起始位置,我們遍歷字串,如果遇到左括號,則將當前下標壓入棧...

最長有效括號

給定乙個只包含 和 的字串,找出最長的包含有效括號的子串的長度。示例 1 輸入 輸出 2 解釋 最長有效括號子串為 示例 2 輸入 輸出 4 解釋 最長有效括號子串為 class solution def longestvalidparentheses self,s str int def test...