算法刷题第18天|LeetCode 20. 有效的括号——栈的经典入门应用
今天是算法刷题的第18天,刷到了栈最经典的入门题:有效的括号。这道题看似简单,却完美体现了栈“先进后出”的核心思想,非常适合用来巩固栈的基础用法。
一、题目回顾
题目链接:https://leetcode.cn/problems/valid-parentheses/
视频讲解:https://www.bilibili.com/video/BV1AF411w78g
给定一个只包含 ()[]{} 的字符串,判断是否有效:
1. 左括号必须用相同类型的右括号闭合
2. 左括号必须以正确顺序闭合
3. 每个右括号都有对应的左括号
示例:
- () → true
- ()[]{} → true
- (] → false
- ([)] → false
- ([]) → true
二、为什么用栈?
括号匹配的本质是:
后出现的左括号,要最先被闭合
→ 完全符合栈 后进先出(LIFO) 的特性。
生活里也很像:
先穿内衣→毛衣→外套,脱的时候必须先脱外套,再脱毛衣,最后脱内衣。
括号嵌套也是一样,最内层先闭合。
三、解题思路(标准栈解法)
1. 先做剪枝:字符串长度为奇数,直接返回 false (不可能成对)
2. 建一个栈,存未匹配的左括号
3. 遍历每个字符:
- 遇到左括号 ( [[__LINK_ICON]](https://leetcode.cn/problems/valid-parentheses/solutions/3958485/zhan-mo-ni-zhan-pi-pei-fa-by-an-cang-xua-zgok/?f_link_type=f_linkinlinenote&flow_extra=eyJpbmxpbmVfZGlzcGxheV9wb3NpdGlvbiI6MCwiZG9jX3Bvc2l0aW9uIjowLCJkb2NfaWQiOiJmOGNhNjcxZmFhYTMxN2ZiLTAxN2U3ZjgxZjViOTQ1N2EifQ%3D%3D&inline_doc_id=f8ca671faaa317fb-017e7f81f5b9457a)[ { → 入栈
- 遇到右括号:
- 栈空 → 无匹配左括号 → false
- 栈顶不匹配 → false
- 匹配 → 出栈
4. 遍历结束,栈必须为空才算全部匹配成功
四、代码实现(Python)
python
def isValid(s: str) -> bool:
# 奇数长度直接返回
if len(s) % 2 != 0:
return False
stack = []
# 右括号 → 对应左括号 的映射
mapping = {')': '(', ']': '[', '}': '{'}
for c in s:
# 右括号
if c in mapping:
# 栈空 或 不匹配
if not stack or stack[-1] != mapping[c]:
return False
stack.pop()
# 左括号
else:
stack.append(c)
# 最终栈必须为空
return len(stack) == 0
五、复杂度分析
- 时间复杂度:O(n)
每个字符只遍历一次,入栈出栈都是 O(1)
- 空间复杂度:O(n)
最坏情况全是左括号,栈存全部字符
算法刷题第18天|LeetCode 20. 有效的括号——栈的经典入门应用
张小明
前端开发工程师
GHelper技术深度解析:华硕笔记本硬件控制开源工具的核心架构与优化策略
GHelper技术深度解析:华硕笔记本硬件控制开源工具的核心架构与优化策略 【免费下载链接】g-helper G-Helper is a fast, native tool for tuning performance, fans, GPU, battery, and RGB on any Asus laptop or handheld - ROG Zephyrus, Flow, Strix, TUF, Vivo…
大模型核心技术全景解析
📌 1. LLM —— Large Language Model(大型语言模型) ✅ 定义: 基于海量文本训练、参数量通常在数十亿(B)以上、采用 Transformer 架构的自回归语言模型。具备强大的上下文理解与生成能力。 🔹 常见代表: GPT 系列(OpenAI) Llama 系列(Meta) Qwen 系列(阿里云…
BepInEx游戏插件框架:5分钟掌握Unity游戏模组开发终极方案
BepInEx游戏插件框架:5分钟掌握Unity游戏模组开发终极方案 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 想要为心爱的Unity游戏添加新功能吗?渴望自定义游…
【开源软件】打造 macOS 纯本地 LLM 工作台 | Sidekick
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 一、项目概述 Sidekick 是一款面向 macOS 平台的原生应用,旨在让用户在无需安装任何第三方依赖的情况下,实现本地 LLM 对本地知…
API 接口自动化测试详细图文教程学习系列15--项目实战演练2
测试学习记录,仅供参考!项目实战演练--封装方法封装文件写入方法1、 在项目根目录下新建一个名称为“configs”的目录文件,用于存放配置文件,继续在该目录文件下新建名称为“setting.py”的 Python 文件,在 “setting.…
LLM动态评估:CSD框架解析与实践指南
1. 项目背景与核心价值在自然语言处理领域,大型语言模型(LLM)的评估一直是学术界和工业界关注的焦点。传统的静态评估方法存在明显的局限性——它们往往在固定数据集上测试模型性能,无法全面反映模型在真实场景中的动态表现。这就…