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.
题意为:给定字符串,仅包含左括号和右括号,找出最长匹配的括号子串,返回该子串的长度。
算法:
1、如果是左括号,压栈;
2、如果是右括号,他一定与栈顶左括号匹配;
如果栈为空,表示没有匹配的左括号,start=i,为下一次可能的匹配做准备
如果栈不空,出栈:
如果栈为空,i-start即为当前找到的匹配长度,检查i-start是否比maxlen更大,使得maxlen得以更新;
如果栈不空,则当前栈顶元素t是上次匹配的最后位置,检查i-t是否比maxlen更大,使得maxlen得以更新;
解法:
class Solution {
public:
int max(int a,int b)
{
if(a<b)
return b;
else
return a;
}
int longestValidParentheses(string s) {
int maxlen=0,start=-1; //start表明这次匹配的前一个位置
stack<int> stk;
for(int i=0;i<s.size();i++)
{
if(s[i]=='(')
stk.push(i);
else{
if(stk.empty())
start=i;
else{
stk.pop();
if(stk.empty())
maxlen=max(maxlen,i-start);
else
maxlen=max(maxlen,i-stk.top());
}
}
}
return maxlen;
}
};