leetcode 32. Longest Valid Parentheses
2016-08-05 12:50
441 查看
Given a string containing just the characters
For
Another example is
分析:
给出一组括号,找出其中连续有效括号的最长长度。
for循环遍历每个括号,当前位置为i,index用于记录每段有效括号的起始位置。
(1)判断当前位置是否是左括号,如果遇到左括号,入栈。
(2)如果不是左括号,
1,判断栈是否为空,如果为空,将index指针后移。
2,如果栈不为空,弹出栈顶元素。
此时,如果栈为空,加上当前位置i的右括号可以构成一段有效的括号,最长为max(maxLen, i到index之间的距离),
如果栈不为空,说明栈顶后一位开始到当前位置可以构成一段有效的括号,那最长为max(maxLen, i到栈顶后一位的长度)。
'('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.
分析:
给出一组括号,找出其中连续有效括号的最长长度。
for循环遍历每个括号,当前位置为i,index用于记录每段有效括号的起始位置。
(1)判断当前位置是否是左括号,如果遇到左括号,入栈。
(2)如果不是左括号,
1,判断栈是否为空,如果为空,将index指针后移。
2,如果栈不为空,弹出栈顶元素。
此时,如果栈为空,加上当前位置i的右括号可以构成一段有效的括号,最长为max(maxLen, i到index之间的距离),
如果栈不为空,说明栈顶后一位开始到当前位置可以构成一段有效的括号,那最长为max(maxLen, i到栈顶后一位的长度)。
public class Solution { public int longestValidParentheses(String s) { if (s == null){ return 0; } Stack<Integer> p = new Stack<Integer>(); int maxLen = 0; int index = 0; for (int i = 0; i < s.length(); i++){ if (s.charAt(i) == '('){ p.push(i); }else{ if(p.isEmpty()){ index = i + 1; }else{ p.pop(); if(p.isEmpty()){ maxLen = Math.max(i - index + 1, maxLen); }else{ maxLen = Math.max(i - p.peek(), maxLen); } } } } return maxLen; } }
相关文章推荐
- leetcode 32. Longest Valid Parentheses
- Eclipse 高亮显示选中的相同变量
- 微信红包随机算法初探
- hibernate初识
- 数据结构实验之栈:行编辑器
- CFormView侧栏停靠
- 岛上书店荐书录
- myBatis性能优化【转】
- MySQL 5.6.30 参数文件参考
- iOS 判断网址、链接地址、url地址是否可用
- Servlet 自动生成验证码
- 嵌入式web服务器lighttpd的交叉编译及配置--xilinx zynq
- Android(开源项目) 滑动选择器 WheelView 源码
- 岛上书店荐书录
- WebStorm 最新 2016 AngularJs 2 代码提示插件安装
- Java.Web学习笔记 Struts1
- webdriver实现2个或两个以上窗口间切换的方法
- HDU1024 这压缩真先进...先进的我想跳河
- Activity 的 生命周期分析
- [LeetCode] 90. Subsets II