/**
* 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.
*/
#include <iostream>
#include <string>
#include <stack>
#include <algorithm>
using namespace std;
//找到最长的括号匹配的子串
int longestValidParentheses(string s)
{
if (s.empty()) return 0;
stack<int> st;
int maxlen = 0;
for (int i = 0; i < s.length(); i++)
{
if (!st.empty() && s[i] == ')' && s[st.top()] == '(')
{
st.pop();
maxlen = max(maxlen, i - st.top());
}
else
{
st.push(i);
}
}
return maxlen;
}
int main()
{
string s = "(()";
cout << longestValidParentheses(s) << endl;
system("pause");
return 0;
}