20. 有效的括号 + 栈 + 括号匹配
20. 有效的括号
LeetCode_20
题目描述
相似题目
方法一:使用常规思路-使用栈匹配括号
class Solution {
public boolean isValid(String s) {
int len = s.length();
if((len & 1) == 1)
return false;
Stack<Character> sta = new Stack<>();
Map<Character, Character> map = new HashMap<>();
map.put('(', ')');
map.put('{', '}');
map.put('[', ']');
for(int i=0; i<len; i++){
char ch = s.charAt(i);
if(sta.isEmpty())
sta.push(ch);
else{
if(ch == map.getOrDefault(sta.peek(), '#')){//注意这里不能直接使用map.get方法,因为我们的map只存储了三种情况,实际上可能会出现6种字符
sta.pop();
}else sta.push(ch);
}
}
return sta.isEmpty();
}
}
方法二:更高效解法
- 本题可以扩展一下思维,map中存储反括号和正括号对,因为一旦出现了反括号,栈顶的元素一定要是正括号,否则匹配必定失败。
- 要注意初始栈为空的情况。
class Solution {
public boolean isValid(String s) {
int len = s.length();
if((len & 1) == 1)
return false;
Stack<Character> sta = new Stack<>();
Map<Character, Character> map = new HashMap<>();
map.put(')', '(');
map.put('}', '{');
map.put(']', '[');
for(int i=0; i<len; i++){
char ch = s.charAt(i);
if(map.containsKey(ch)){
if(sta.isEmpty() || sta.peek() != map.get(ch))
return false;
sta.pop();
}else{
sta.push(ch);
}
}
return sta.isEmpty();
}
}
Either Excellent or Rusty
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
2020-03-13 蓝桥杯-分考场(dfs)
2020-03-13 蓝桥杯-合根植物(并查集)
2020-03-13 蓝桥杯-小计算器(进制转换和模拟)