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.
int longestValidParentheses(string s) {
if (s.empty())
return 0;
int max =0;
vector<int>Maxlength(s.size(),0);
for (int i = Maxlength.size()-2;i>=0;--i)
{
if (s[i]=='(')
{
int j = i+1+Maxlength[i+1];
if (j<s.size()&&s[j]==')')
{
Maxlength[i] = Maxlength[i+1]+2;
if (j+1<s.size())
Maxlength[i]+=Maxlength[j+1];
}
}
max =max<=Maxlength[i]?Maxlength[i]:max;
}
return max;
}
int longestValidParentheses(string s) {
if (s.empty())
return 0;
stack<int>CharStack;
CharStack.push(-1);
int length =0;
int longestlength =0;
for (int i = 0;i!=s.size();++i)
{
if (s[i]=='(')
CharStack.push(i);
else if (s[i]==')')
{
if (CharStack.size()>1)
{
CharStack.pop();
length=i-CharStack.top();
longestlength =max(longestlength,length);
}
else{
CharStack.pop();
CharStack.push(i);
}
}
}
return longestlength;
}
本文介绍了两种求解最长有效括号子串长度的方法:动态规划法和栈法。动态规划法通过遍历字符串并利用已计算的最长有效括号长度来更新当前位置的有效括号长度;栈法则通过维护一个栈记录左括号的位置,当遇到右括号时检查栈顶元素以计算最长有效括号子串的长度。
382

被折叠的 条评论
为什么被折叠?



