news 2026/4/30 13:36:51

算法训练营第十八天| 20. 有效的去括号 栈的经典应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法训练营第十八天| 20. 有效的去括号 栈的经典应用

题目链接:https://leetcode.cn/problems/valid-parentheses/ 视频讲解:https://www.bilibili.com/video/BV1AF411w78g

一、 题目核心分析与思路

题目要求:判断一个只包含括号字符(, ), [, ], {, }的字符串s是否为“有效”的。有效的标准是:

  1. 类型匹配:左括号必须用相同类型的右括号闭合。

  2. 顺序正确:左括号必须以正确的顺序闭合。

  3. 一一对应:每个右括号都必须有一个对应的左括号。

核心思路 - 栈(Stack)的应用

括号匹配问题具有“最近相关性”或“后进先出”的特性。最后出现的、未被匹配的左括号,必须优先与最先出现的、与其匹配的右括号进行匹配。这正是栈(Stack)数据结构的典型应用场景。

算法步骤

  1. 初始化:创建一个空栈,用于存放遍历过程中遇到的左括号

  2. 遍历字符串

    • 遇到左括号(, [, {:将其压入栈(push)

    • 遇到右括号), ], }:需要检查栈顶元素。

      • 如果栈为空,说明没有左括号与之匹配,字符串无效。

      • 如果栈顶元素与当前右括号不匹配,说明括号类型顺序错误,字符串无效。

      • 如果栈顶元素与当前右括号匹配,则将栈顶元素弹出(pop),表示这一对括号匹配成功。

  3. 最终检查:遍历完成后,如果栈为空,说明所有左括号都找到了匹配的右括号,字符串有效;如果栈不为空,说明还有多余的左括号未被匹配,字符串无效。

边界情况处理

  • 左括号多余:遍历结束,栈不空。(如"((())"

  • 右括号多余:遇到右括号时,栈已空。(如"())"

  • 括号类型不匹配:遇到右括号时,栈顶左括号与之不配对。(如"([)]"

优化技巧

  • 剪枝:如果字符串长度是奇数,则一定无法完全匹配,可以直接返回false

#include <stack> #include <unordered_map> #include <string> using namespace std; class Solution { public: bool isValid(string s) { // 优化:长度为奇数的字符串一定无效 if (s.size() % 2 != 0) return false; stack<char> stk; // 用于存储左括号的栈 // 建立右括号到左括号的映射,方便匹配检查 unordered_map<char, char> pair = { {')', '('}, {']', '['}, {'}', '{'} }; for (char c : s) { if (pair.count(c)) { // 当前字符c是右括号 // 如果栈为空,或栈顶元素不匹配当前右括号对应的左括号 if (stk.empty() || stk.top() != pair[c]) { return false; // 匹配失败 } stk.pop(); // 匹配成功,弹出栈顶左括号 } else { // 当前字符c是左括号 stk.push(c); } } // 遍历结束,栈空则全部匹配成功 return stk.empty(); } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 13:36:49

AI抠图在线工具有哪些?2026年最实用的免费抠图工具推荐

经常需要处理图片的朋友应该都遇到过这样的烦恼——要么找个靠谱的抠图工具难于上青天&#xff0c;要么好不容易找到一个&#xff0c;结果操作复杂得像在学新技能。作为一个长期和图片打交道的人&#xff0c;我深知一个趁手的AI抠图工具有多重要。今天就来和大家分享一下&#…

作者头像 李华
网站建设 2026/4/30 13:36:46

透明底图片怎么制作?2026年最全工具对比和实战教程

最近在做电商产品图的时候&#xff0c;我被一个问题难住了——如何快速给商品照片制作透明背景&#xff1f;翻出尘封的Photoshop&#xff0c;花了半小时才抠出一张还不完美的图片。后来我发现了一些神奇的工具&#xff0c;特别是一款微信小程序&#xff0c;彻底改变了我的工作效…

作者头像 李华
网站建设 2026/4/30 13:35:56

Pearcleaner:彻底告别macOS应用残留的终极清理工具

Pearcleaner&#xff1a;彻底告别macOS应用残留的终极清理工具 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 你是否曾将macOS应用拖入废纸篓后&#xff0c…

作者头像 李华
网站建设 2026/4/30 13:35:55

LeetCode 顺序统计量选择题解

LeetCode 顺序统计量选择题解 题目描述 实现顺序统计量选择算法&#xff0c;在一个整数数组中查找第 k 小的元素。 示例&#xff1a; 输入&#xff1a;[64, 34, 25, 12, 22, 11, 90]&#xff0c;k 3输出&#xff1a;22&#xff08;第 3 小的元素&#xff09; 解题思路 方法&am…

作者头像 李华
网站建设 2026/4/30 13:34:22

C# WinForm串口调试助手实战:手把手教你用SerialPort类搞定RS485/232通信

C# WinForm串口调试助手实战&#xff1a;从零构建工业级通信工具 1. 项目规划与基础环境搭建 在工业自动化、物联网设备调试等领域&#xff0c;串口通信依然是最基础且广泛使用的数据传输方式之一。相比网络通信&#xff0c;串口通信具有配置简单、响应实时性强、硬件成本低等优…

作者头像 李华