有效的括号
# 📃 题目描述
题目链接:20. 有效的括号 - 力扣(LeetCode) (leetcode-cn.com) (opens new window)
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
# 🔔 解题思路
遍历括号序列:
- 遇到左括号就入栈
- 遇到右括号,就将其和栈顶元素进行比较,如果不能匹配,直接返回 false;如果能够匹配,则将栈顶元素出栈
- 最后若栈空,则为有效括号序列
class Solution {
public boolean isValid (String s) {
if (s == null || s.length() == 0) {
return true;
}
Stack<Character> stack = new Stack<>();
for (char ch : s.toCharArray()) {
// 遇到左括号直接入栈
if (ch == '(' || ch == '{' || ch == '[') {
stack.push(ch);
}
// 遇到左括号,和栈顶元素进行匹配
else if (ch == ')') {
if (stack.isEmpty() || stack.peek() != '(') {
return false;
}
stack.pop();
}
else if (ch == '}') {
if (stack.isEmpty() || stack.peek() != '{') {
return false;
}
stack.pop();
}
else if (ch == ']') {
if (stack.isEmpty() || stack.peek() != '[') {
return false;
}
stack.pop();
}
}
return stack.isEmpty();
}
}
用 switch 写也行:
class Solution {
public boolean isValid(String s) {
if (s == null || s.length() == 0) {
return true;
}
Stack<Character> stack = new Stack<>();
for (char c : s.toCharArray()) {
// 左括号
if (c == '(' || c == '{' || c == '[') {
stack.push(c);
}
// 右括号
else {
if (stack.isEmpty()) {
return false;
}
char temp = stack.pop();
switch (temp) {
case '(':
if (c != ')') {
return false;
}
break;
case '[':
if (c != ']') {
return false;
}
break;
case '{':
if (c != '}') {
return false;
}
break;
}
}
}
return stack.isEmpty();
}
}
# 💥 复杂度分析
- 空间复杂度:O(N)
- 时间复杂度:O(N)
🎁 公众号

各位小伙伴大家好呀,叫我小牛肉就行,目前在读东南大学硕士,上方扫码关注公众号「飞天小牛肉」,与你分享我的成长历程与技术感悟~
帮助小牛肉改善此页面 (opens new window)
Last Updated: 2023/02/16, 11:27:10