LeetCode第20题有效的括号

继续打卡算法题,今天学习的是LeetCode的第20题有效的括号,这道题目是道中等题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些帮助。

分析一波题目

这个题目需要判断括号是有效果的,有效括号有一个特征非常重要, 那就是遇到了右边的括号,一定存在左边匹配的括号。

比如[()], 遇到)的时候,最近的一个一定存在(,最近的也是最近最后遍历到的括号,我们可以使用栈结构来表达这种数据。

编码解决

java 复制代码
class Solution {
    public boolean isValid(String s) {
        int n = s.length();
        //存储关系
        Map<Character, Character> map = new HashMap<Character, Character>() {{
            put(')', '(');
            put(']', '[');
            put('}', '{');
        }};
        Deque<Character> stack = new LinkedList<Character>();
        for (int i = 0; i < n; i++) {
            char ch = s.charAt(i);
            //是右边的括号
            if (map.containsKey(ch)) {
                //是否栈顶有匹配的左边括号
                if (stack.isEmpty() || stack.peek() != map.get(ch)) {
                    return false;
                }
                stack.pop();
            } else {
                //左边的括号,入栈
                stack.push(ch);
            }
        }
        return stack.isEmpty();
    }
}

总结

栈的先进后出结构可以解决一些有规律的符号匹配的问题,使用起来非常巧妙。

相关推荐
Navigator_Z1 小时前
LeetCode //C - 1089. Duplicate Zeros
c语言·算法·leetcode
JAVA9651 小时前
JAVA面试-并发篇 03-使用synchronized doublecheck实现单例有什么坑
java·单例模式·面试
JustHappy2 小时前
古法编程秘籍(二):什么是代码模块化?别背概念,把房间收拾明白就够了
前端·后端
小江的记录本3 小时前
【JVM虚拟机】堆内存分代模型:年轻代(Eden+Survivor)、老年代、元空间Metaspace(附《思维导图》+《面试高频考点清单》)
java·前端·jvm·后端·python·spring·面试
云泽8084 小时前
C++ 可调用对象通关指南:深度解析 Lambda 表达式、function 包装器与 bind 绑定器
开发语言·c++·算法
wlsh154 小时前
Go 迭代器
算法
语戚4 小时前
力扣 3161. 块放置查询:线段树解法(Java 实现)
java·算法·leetcode·面试·线段树·力扣·
天天进步20154 小时前
Python全栈项目实战:从零构建校园心理健康咨询平台
面试·职场和发展
CS创新实验室5 小时前
从顺序表到动态数组:数据结构的永恒基石与现代语言的优雅封装
数据结构·算法
Black蜡笔小新6 小时前
自动化AI算法训练服务器DLTM训推一体化平台助力农业生产管理实现安全智能化
人工智能·算法·自动化