leecode原题
思路
1.使用栈的特性,一一匹配
2. 如果循环完毕,stack不为空,则返回false
3. 遍历的时候,如果是左括号,则把对应的右括号压栈
4. 遍历的时候,如果是右括号,把栈顶字符取出来比较,相等则弹栈,不相等则直接返回false
5. 遍历的时候,如果发现stack为空了,循环还未结束,则直接返回false
代码实现
public class Test01 {
public static void main(String[] args) {
}
public static boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') {
stack.push(')');
}else if (s.charAt(i) == '[') {
stack.push(']');
}else if (s.charAt(i) == '{') {
stack.push('}');
} else if (stack.isEmpty() || stack.peek() != s.charAt(i)) {
// 如果发现stack为空了,循环还未结束,则直接返回false
// 如果是右括号,把栈顶字符取出来比较,不相等则直接返回false
return false;
} else {
// 如果是右括号,把栈顶字符取出来比较,相等则弹栈
stack.pop();
}
}
// 如果循环完毕,stack不为空,则返回false
return stack.isEmpty();
}
}