class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for(int i = 0 ;i<s.length();++i){
if(s.charAt(i) == '(' ||s.charAt(i) == '[' || s.charAt(i) == '{'){
stack.push(s.charAt(i));
}else if((s.charAt(i) == ')' && stack.size()!=0 && stack.peek() =='(')||
(s.charAt(i) == ']' && stack.size()!=0 && stack.peek() =='[')||
(s.charAt(i) == '}' && stack.size()!=0 && stack.peek() =='{')){
stack.pop();
}else{
return false;
}
}
return stack.isEmpty();
}
}
整个逻辑很好判断。
如果有左边的括号,那么就入栈。
如果有右边的括号,那么判断,当前是不是栈为空,若不为空,再判断时候上一个节点是对应的括号,如果是对应的,那么弹栈。
最后判断栈是否为空。空说明有效,非空说明还有未匹配的左边括号,返回false。