您的位置:首页 > 其它

Leetcode #20 Valid Parentheses 括号验证 解题小节

2016-03-22 23:40 323 查看

1 题目理解

这道题,做的事情就是匹配{} [] ()等括号的工作,检查其是否合法。

其实所谓的合法就是:有几个左边的,就有几个右边的,只要左括号的出现和右括号出现的次数一样。。。并且左边的一定比右边的先出现。。

所以做法就是:

1、设置六个变量或者使用数组,分别记录这三类括号的左边,和右边出现的频率,遇到左边的就+1,右边也是对应的+1。

2、在遍历的过程中,每对括号右边的计数不能大于左边的,不然就不合法了

3、遍历完成后,每一对括号的左右边数量要一致。

2 原题

Valid Parentheses

Given 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,提交时没删除。。现在速度是正常的了~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: