class Solution {
public boolean isValid(String s) {
int n = s.length();
if( n%2 ==1 ){
return false;
}
Stack<Character> stack = new Stack<>() ;
for(int i =0 ;i<n;i++){
char c = s.charAt(i);
if(c=='('||c=='{'||c == '['){
stack.push(c);
continue;
}
if(!stack.empty()){
if(c==')'&&stack.peek()=='('||c=='}'&&stack.peek()=='{'||c==']'&&stack.peek()=='['){
stack.pop();
}else{
return false;
}
}else{
return false;
}
}
return stack.empty();
}
}
上面的代码是可行的
一边学习一边写
最开始不知道怎么用堆,首先建堆时我选用了字符堆,所以是Stack<Character>,然后java在建堆时必须要new,我也试了不new不行呀。然后在两处if判断时不能用stack.pop()==null,有时stack可能会报空指针。所以调用stack.empty()验空就可以了。思路是将s遍历赋给c当是(,{,[中的一个时压栈,当遇到),},]时要比对前一个与之对应的括号然后出栈。最后如果没有出栈完毕证明不是有效括号,出栈完毕则是有效括号。