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.
Subscribe to see which companies asked this question
class Solution {
public:
int longestValidParentheses(string s) {
stack<int> s1;
int longest=0;
for(int i=0;i<s.size();++i) //在s1中放置不能匹配的节点位置
{
if(s[i]=='(')
{
s1.push(i);
}
else
{
if(!s1.empty()&&(s[s1.top()]=='(')&&s[i]==')')
{
s1.pop();
}
else
{
s1.push(i);
}
}
}
if(s1.empty())
{
longest=s.size();
}
else
{
int a=s.size();
while(!s1.empty()) //匹配的位置位于不匹配的两个节点之间
{
int b=s1.top();
s1.pop();
longest=max(longest,a-b-1);
a=b;
}
longest = max(longest,a); //对余第一个不匹配的节点,它是一个单边的,需要自行在比较一次。
}
return longest;
}
};