LeetCode---(32)Longest Valid Parentheses
2015-06-23 16:55
387 查看
Given a string containing just the characters
find the length of the longest valid (well-formed) parentheses substring.
For
which has length = 2.
Another example 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;
}
};
'('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;
}
};
相关文章推荐
- Joomla!组件如何工作基础知识
- STL标准库的关联容器
- 苹果公司开发者账号注册流程详解
- 泛函编程(31)-泛函IO:Free Monad-Running free
- MySQL单表查询优化技巧
- EditText输入框的长度调整
- Azure Queue队列存储(2)
- java 中 ==和equals 的区别
- hadoop2.2.0源码编译
- PHP文件格式规范
- STM32 定时器用于外部脉冲计数(转)
- VB调用EXCEL,第二次报错问题
- git 指南
- 如何检测字符串在Obj-C里是否为空?
- Uber选拔专车司机:五年以上驾驶经验 两小时视频培训
- java 中 String 类的几个问题
- 掌握GRE高频词汇
- Lucene优化
- Love 0.9.1变化(相对于0.9.0)
- ComponentName意思