[leetcode-32]Longest Valid Parentheses(java)
2015-09-01 16:54
537 查看
问题描述:
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.
分析:这道题很有意思,主要是将人思考的过程程序化,我们人类在做这题过程中,无非是将不能匹配的地方隔离开来,就像插个小旗一样。
那这里也是,我们对数组进行遍历时,维护一个栈,栈顶中的元素为最近一次的(在字符数组中的索引,当遇到一个),获取该索引以及当前index,并将数组中两个元素置1,当遇到一个(时,就将该索引压栈。如此一来,当一次遍历结束之后,chars数组就变成了一个由1和(组成的序列。其中(就像是分隔符,然后以此为分割,汇总每个部分的总和。
时间复杂度为O(N),空间复杂度为O(N)
代码如下:316ms
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.
分析:这道题很有意思,主要是将人思考的过程程序化,我们人类在做这题过程中,无非是将不能匹配的地方隔离开来,就像插个小旗一样。
那这里也是,我们对数组进行遍历时,维护一个栈,栈顶中的元素为最近一次的(在字符数组中的索引,当遇到一个),获取该索引以及当前index,并将数组中两个元素置1,当遇到一个(时,就将该索引压栈。如此一来,当一次遍历结束之后,chars数组就变成了一个由1和(组成的序列。其中(就像是分隔符,然后以此为分割,汇总每个部分的总和。
时间复杂度为O(N),空间复杂度为O(N)
代码如下:316ms
[code]public class Solution { public int longestValidParentheses(String s) { Stack<Integer> stack = new Stack<>(); char[] chars = s.toCharArray(); int count = 0; int max = 0; for(int i = 0;i<chars.length;i++){ if(chars[i]=='(') stack.push(i); else{// ) if(!stack.isEmpty()){ int index = stack.pop(); chars[index] = 1; chars[i] = 1; } } } //filter for(int i = 0;i<chars.length;i++){ if(chars[i]!=1){ if(count>max) max = count; count = 0; }else{ count++; } } if(count>max) max = count; return max; } }
相关文章推荐
- 从源码角度分析java层Handler机制
- struts2和servlet的共存问题
- 利用JDBC实现java与MySQL数据库的连接及相关操作
- Java 8十个lambda表达式案例
- gradle复制依赖jar
- Spring+JDBC组合开发
- JAVA读写文件,如何避免中文乱码
- Spring笔记——Spring+JDBC组合开发
- 二 JDK + mysql + yum + rpm
- hahahahha
- JAVA 验证码生成
- 关于java中的枚举enum
- java中值传递和引用传递
- java学习日记3
- java反射机制
- Exception in thread "main" java.lang.NoClassDefFoundError报错
- Java中操作时间比较好用的类
- java基础之继承
- eclipse快捷键大全
- Eclipse-统计代码行数