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;
}