[32. 最長有效括號
阿新 • • 發佈:2022-05-13
32. 最長有效括號
給你一個只包含 '('
和 ')'
的字串,找出最長有效(格式正確且連續)括號子串的長度。
示例 1:
輸入:s = "(()"
輸出:2
解釋:最長有效括號子串是 "()"
示例 2:
輸入:s = ")()())"
輸出:4
解釋:最長有效括號子串是 "()()"
示例 3:
輸入:s = ""
輸出:0
提示:
0 <= s.length <= 3 * 104
-
s[i]
為'('
或')'
思路:
對於最大有效括號長度,只靠一個棧是無法做到的,因此需要新增一個數組來記錄到達每個位置時的最大有效括號長度
class Solution { public: int longestValidParentheses(string s) { stack<int>st;//記錄左括號出現的位置 int dp[s.size()+1];//dp[i]表示以s[i-1]結尾的最長括號子串 dp[0]=0; for(int i=0;i<s.size();i++){ if(s[i]=='('){ st.push(i); dp[i+1]=0;//'('不可能是合法括號結尾 }else{ //如果是')' if(!st.empty()){ int leftIndex=st.top(); st.pop(); int len=1+i-leftIndex+dp[leftIndex]; dp[i+1]=len; }else{ //沒有配對左括號 dp[i+1]=0; } } } int maxL=0; for(int i=0;i<s.size()+1;i++){ maxL=max(maxL,dp[i]); } return maxL; } };