题目
思路
该题目和简单的括号匹配不同,该题中出现了3中括号( ),{ },[ ],但思路依然是一样的,都是利用栈的思想。
但是此次的入栈方式不同,当我们匹配到(,[,{,时我们需要向栈中添加相反的括号,因此当我们匹配到不是左括号时,我们就去栈中弹出,如果弹出的和本身不匹配就返回false,到最后如果栈中留下的还有就说明整体不匹配,栈中为Null就说明匹配。
代码解答
class Solution {
public boolean isValid(String str) {
//若当前的字符串为null串返回true
if (str.length() == 0) {
return true;
}
Stack<Character> stack = new Stack();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
//若果发现({[就入栈一个他所对应的另一半
if (c == '(') {
stack.push(')');
} else if (c == '{') {
stack.push('}');
} else if (c == '[') {
stack.push(']');
} else {
//都不是的话,判断栈是否为null,是null的直接返回false
if (stack.isEmpty()) {
return false;
}
//弹出1个栈顶元素
char topChar = stack.pop();
//若不匹配,就直接返回false
if (c != topChar) {
return false;
}
}
}
//最后栈中没有元素,表示匹配完成,返回true
return stack.isEmpty();
}
}