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,提交时没删除。。现在速度是正常的了~~