您的位置:首页 > 其它

LeetCode---(32)Longest Valid Parentheses

2015-06-23 16:55 387 查看
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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: