有效的括号
1.正常方法
扫描到左括号时入栈,扫描到右括号时出栈并判断左右括号是否匹配。
//leetcode-20
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(!(stack.empty())){
char t = stack.pop();
if((t == '(' && s.charAt(i) == ')') || (t == '{' && s.charAt(i) == '}') || (t == '[' && s.charAt(i) == ']')){
continue;
}
else{
return false;
}
}
else{
return false;
}
}
return stack.empty();
}
}
2.改进方法
扫描到左括号时将对应的右括号入栈,扫描到右括号时只需出栈并判断二者是否相等即可。
下面引入代码随想录的答案以供参考。
//leetcode-20
class Solution {
public boolean isValid(String s) {
Deque<Character> deque = new LinkedList<>();
char ch;
for (int i = 0; i < s.length(); i++) {
ch = s.charAt(i);
//碰到左括号,就把相应的右括号入栈
if (ch == '(') {
deque.push(')');
}else if (ch == '{') {
deque.push('}');
}else if (ch == '[') {
deque.push(']');
} else if (deque.isEmpty() || deque.peek() != ch) {
return false;
}else {//如果是右括号判断是否和栈顶元素匹配
deque.pop();
}
}
//最后判断栈中元素是否匹配
return deque.isEmpty();
}
}
未完待续。。。