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