Given a string containing just the characters ’(’ and ’)’, find the length of the longest valid (wellformed)
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
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 <stack>
using namespace std;
//思路。使用栈。
//1.遍历,遇到左括号压栈。
//2.如果遇到右括号,与栈首比较,如果匹配则pop,length+2.如果不匹配,length重置。记录maxLength为length的最大值,
int longestValidParetheses(string s)
{
int len = 0;
int maxLen = 0;
stack<char> charstack;
for(int i=0;i<s.length();i++)
{
char c=s[i];
if(c == '(')
{
charstack.push(c);
}
else if (c == ')')
{
if(!charstack.empty())
{
char top = charstack.top();
if(top == '(')
{
charstack.pop();
len = len + 2;
}
else
{
len = 0;
}
maxLen = max(maxLen,len);
}
}
}
return maxLen;
}
void main()
{
string s = "(())";
int maxLen = longestValidParetheses(s);
printf("The longest valid paratheses is %d.\n",maxLen);
}