Leetcode #20 Valid Parentheses 括号验证 解题小节
2016-03-22 23:40
323 查看
1 题目理解
这道题,做的事情就是匹配{} [] ()等括号的工作,检查其是否合法。其实所谓的合法就是:有几个左边的,就有几个右边的,只要左括号的出现和右括号出现的次数一样。。。并且左边的一定比右边的先出现。。
所以做法就是:
1、设置六个变量或者使用数组,分别记录这三类括号的左边,和右边出现的频率,遇到左边的就+1,右边也是对应的+1。
2、在遍历的过程中,每对括号右边的计数不能大于左边的,不然就不合法了
3、遍历完成后,每一对括号的左右边数量要一致。
2 原题
Valid ParenthesesGiven a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.
3 AC解
public class Solution { public boolean isValid(String s) { char[] chars=s.toCharArray(); char tmp; Stack<Character> stack=new Stack<Character>(); for(int i=0;i<chars.length;i++){ if(chars[i]=='(' || chars[i]=='[' ||chars[i]=='{'){ stack.push(chars[i]); } else{ if(stack.isEmpty()){ return false; } tmp=stack.pop(); //从asic上看不超过2其差距 if(tmp-chars[i]>2 || tmp-chars[i]<-2 ) return false; } } if(stack.isEmpty()){ return true; } else return false; } }
PS:做这道题时,我还不太理解leetcode规则,看到运行时间太慢,以为是我的代码有问题,所以做了一些奇怪的改进,如判断左右括号。。
后面发现是因为我白板写代码时使用了printf,提交时没删除。。现在速度是正常的了~~
相关文章推荐
- 拓扑排序 POJ 2367
- ASP.NET-Request对象
- 多线程(二)NSThread
- 项目之IC卡程序2
- JVM内幕:Java虚拟机详解
- ASP.NET-ActionResutlt
- ASP.NET-MVC中Entity和Model之间的关系
- 14. Longest Common Prefix
- Linux常用命令/工具(一)
- 大龄程序员的未来在何方
- 自定义全局监听(任意位置任意行为监听)
- 学习JS的第三天
- 考试系统软件需求说明书(齐能、梁瑷云、李红、米军奉)
- HDU 4403 A very hard Aoshu problem(DFS)
- winform treeview绑定数据 DOM操作
- ASP.NET-viewBag Viewdata Tempdata
- hadoop2安装脚本
- 插入排序
- POJ2449
- jenkins(二)linux slave构建