20_有效的括号[EASY]
约 290 字小于 1 分钟
2026-03-23
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()"
输出:true示例 2:
输入:s = "()[]{}"
输出:true示例 3:
输入:s = "(]"
输出:false示例 4:
输入:s = "([])"
输出:true示例 5:
输入:s = "([)]"
输出:false解题思路
使用一个栈来暂存括号
- 遇到左括号,入栈
- 遇到右括号,查看栈顶元素跟右括号是否匹配
- 如果匹配,则弹出栈顶元素,如果不匹配,返回false
- 如果字符串遍历完后,栈不为空,说明还有多余的左括号,不匹配
Java实现
public boolean isValid(String s) {
if (s == null || s.length() < 2){
return false;
}
char[] cs = s.toCharArray();
Stack<Character> stack = new Stack<>();
for (char c : cs){
if (c == '(' || c == '{' || c == '['){
stack.push(c);
} else {
if (stack.isEmpty()){
return false;
}
char top = stack.pop();
if (top == '(' && c != ')'){
return false;
}
if (top == '[' && c != ']'){
return false;
}
if (top == '{' && c != '}'){
return false;
}
}
}
if (!stack.isEmpty()){
return false;
}
return true;
}