給定乙個只包含 『(』 和 『)』 的字串,找出最長的包含有效括號的子串的長度。
輸入: 「(()」輸出: 2
解釋: 最長有效括號子串為 「()」
輸入: 「)()())」用陣列dp[i]表示括號串s[i]結尾的最大括號字串長度。輸出: 4
解釋: 最長有效括號子串為 「()()」
當 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...