Given a string containing just the characters '('
and ')'
,
find the length of the longest valid (well-formed) parentheses substring.
For "(()"
, the longest valid parentheses substring is "()"
,
which has length = 2.
Another example is ")()())"
, where the longest valid parentheses substring is "()()"
,
which has length = 4.
使用动态规划。直接记录每一个位置的括号能否够跟前面的括号匹配,假设匹配,则记录为true
这里使用栈实现括号的匹配
int longestValidParentheses(string s) { int longestLen=0; if(s.size()<2) return 0; stack<int> st; vector<bool> dp; dp.resize(s.size(), false); for(int i=0; i<s.size(); i++){//实现动态规划 if(s[i]=='('){ st.push(i); } else if(st.size()){ if(s[st.top()]=='('){ dp[st.top()]=true; dp[i]=true; } st.pop(); } } int localLong=0; int j; for(j=0; j<s.size(); j++){//计算最长匹配括号的长度 if(dp[j]){ localLong++; if(localLong>longestLen){ longestLen=localLong; } } else{ localLong=0; } } if(longestLen%2==0) return longestLen; else return longestLen-1; }