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();
    }
}

总结

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

相关推荐
快乐肚皮7 分钟前
深入理解Loop Engineering
前端·后端
半个落月10 分钟前
从递归到快速排序:用 JavaScript 把分治思想讲明白
javascript·算法·面试
Darling噜啦啦13 分钟前
快速排序与递归思维:从分治策略到数组扁平化——面试必考算法全解析
面试·排序算法
小兔崽子去哪了29 分钟前
Vue3 + Pinia 集成 IGV.js 实现 BAM 文件在线浏览
javascript·vue.js·后端
孟陬36 分钟前
Claude Code 巧思 `Ctrl+S` 暂存键
前端·后端
雪隐1 小时前
个人电脑玩AI-06让5060 Ti给你打工——不光能画画,Qwen3-TTS还能学人说话,连我老板都信了!
人工智能·后端·python
Oneslide1 小时前
openEuler 17.1GB Everything ISO 离线本地 DNF 源搭建教程
后端
小月土星1 小时前
JavaScript 快速排序:从 pivot、双指针到分治思想
javascript·算法·面试
沉默王二1 小时前
Agent底层原理连问8道,从ReAct到记忆压缩,PaiCLI项目实战拆解
面试·agent·ai编程
小月土星1 小时前
JavaScript 递归入门:从 1 到 n 求和,再到数组扁平化
javascript·算法·面试