news 2026/6/23 16:21:57

【每日算法】LeetCode 20. 有效的括号

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【每日算法】LeetCode 20. 有效的括号

对前端开发者而言,学习算法绝非为了“炫技”。它是你从“页面构建者”迈向“复杂系统设计者”的关键阶梯。它将你的编码能力从“实现功能”提升到“设计优雅、高效解决方案”的层面。从现在开始,每天投入一小段时间,结合前端场景去理解和练习,你将会感受到自身技术视野和问题解决能力的质的飞跃。------ 算法:资深前端开发者的进阶引擎

LeetCode 20. 有效的括号:前端开发者的解析与实现

1. 题目描述

给定一个只包括'('')''{''}''['']'的字符串s,判断字符串是否有效。有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

示例:

  • 输入:s = "()",输出:true
  • 输入:s = "()[]{}",输出:true
  • 输入:s = "(]",输出:false
  • 输入:s = "([)]",输出:false
  • 输入:s = "{[]}",输出:true

2. 问题分析

这是一个经典的括号匹配问题,在前端开发中广泛存在类似场景,例如:

  • HTML/XML 标签闭合检查:确保<div></div>正确匹配。
  • 代码编辑器语法高亮:在 JavaScript、CSS 或模板字符串中验证括号、引号是否成对。
  • 表达式求值:如解析 JSON、计算算术表达式(如(1 + 2) * 3)时,需先验证括号有效性。

问题核心在于顺序匹配:后出现的左括号需先匹配右括号,这天然契合栈(Stack)的 LIFO(后进先出)特性。因此,栈是最优数据结构选择。

3. 解题思路

解决此问题主要有两种思路:暴力替换法和栈方法。栈方法是最优解,因其时间复杂度和代码可读性俱佳。

3.1 暴力法(替换法)

  • 思路:不断循环替换字符串中成对的括号(如"()""[]""{}")为空字符串,直到字符串不再变化。若最终字符串为空,则有效;否则无效。
  • 复杂度:时间复杂度 O(n^2)(每次替换可能需遍历整个字符串),空间复杂度 O(1)。效率低,不推荐用于生产环境。

3.2 栈方法(最优解)

  • 思路:遍历字符串,使用栈存储左括号;遇到右括号时,检查栈顶左括号是否匹配。若匹配则弹出栈顶,继续;否则无效。遍历结束后,栈应为空才有效。
  • 复杂度:时间复杂度 O(n),空间复杂度 O(n)(最坏情况栈存储所有字符)。这是最优解,因其一次遍历即可解决。

4. 代码实现

4.1 暴力法实现

functionisValid(s){while(s.includes('()')||s.includes('[]')||s.includes('{}')){s=s.replace('()','').replace('[]','').replace('{}','');}returns==='';}

4.2 栈方法实现

functionisValid(s){conststack=[];constmap={'(':')','[':']','{':'}'};for(letcharofs){if(map[char]){// 左括号入栈stack.push(char);}else{// 右括号检查匹配consttop=stack.pop();if(map[top]!==char){returnfalse;}}}// 栈为空表示所有括号匹配returnstack.length===0;}

5. 复杂度与优缺点对比

思路时间复杂度空间复杂度优点缺点适用场景
暴力法O(n^2)O(1)代码简单,无需额外数据结构效率低,字符串替换开销大小规模数据或学习演示
栈方法O(n)O(n)高效,一次遍历;易于扩展需额外空间存储栈生产环境,如前端解析、编辑器校验

6. 总结

实际应用场景:

  • 前端框架:Vue/React 的模板编译时,需检查标签和指令的括号匹配。
  • 构建工具:Babel、Webpack 在解析 JavaScript AST 时,依赖括号验证。
  • 开发工具:VS Code、Chrome DevTools 的代码调试器实时检测语法错误。
  • 表单验证:复杂表达式输入(如规则引擎)需确保括号正确。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 3:09:50

Photoshop图层批量导出终极指南:10倍效率提升的完整教程

还在为Photoshop中繁琐的图层导出工作而烦恼吗&#xff1f;每天面对几十甚至上百个图层&#xff0c;手动导出不仅耗时耗力&#xff0c;还容易出错。今天我要向大家介绍这款真正能改变你工作方式的Photoshop图层批量导出工具&#xff0c;让你从重复劳动中彻底解放出来&#xff0…

作者头像 李华
网站建设 2026/6/19 3:54:40

【每日算法】LeetCode 739. 每日温度:从暴力遍历到单调栈的优雅解决

对前端开发者而言&#xff0c;学习算法绝非为了“炫技”。它是你从“页面构建者”迈向“复杂系统设计者”的关键阶梯。它将你的编码能力从“实现功能”提升到“设计优雅、高效解决方案”的层面。从现在开始&#xff0c;每天投入一小段时间&#xff0c;结合前端场景去理解和练习…

作者头像 李华
网站建设 2026/6/23 1:58:44

Golin终极指南:网络安全扫描与等保核查的完整解决方案

Golin终极指南&#xff1a;网络安全扫描与等保核查的完整解决方案 【免费下载链接】Golin 弱口令检测、 漏洞扫描、端口扫描&#xff08;协议识别&#xff0c;组件识别&#xff09;、web目录扫描、等保模拟定级、自动化运维、等保工具&#xff08;网络安全等级保护现场测评工具…

作者头像 李华
网站建设 2026/6/22 3:37:40

77、由于您仅提供了“以下”两个字,没有具体的英文内容,所以我无法按照要求为您生成博客,请您提供完整的英文内容。

由于您仅提供了“以下”两个字&#xff0c;没有具体的英文内容&#xff0c;所以我无法按照要求为您生成博客&#xff0c;请您提供完整的英文内容。请您先提供完整的英文内容&#xff0c;这样我才能为您生成符合要求的博客下半部分。目前仅“以下”二字&#xff0c;没有足够信息…

作者头像 李华
网站建设 2026/6/22 23:22:16

Grafana中文版终极指南:快速搭建专业数据可视化监控平台

Grafana中文版终极指南&#xff1a;快速搭建专业数据可视化监控平台 【免费下载链接】grafana-chinese grafana中文版本 项目地址: https://gitcode.com/gh_mirrors/gr/grafana-chinese Grafana中文版是一款基于官方源码深度汉化的专业数据可视化工具&#xff0c;为中文…

作者头像 李华
网站建设 2026/6/21 18:47:07

4、Mac OS X系统使用指南:从Launchd到Shell操作

Mac OS X系统使用指南:从Launchd到Shell操作 1. Launchd系统启动程序 从Mac OS X 10.4(Tiger)开始,苹果引入了名为launchd的新系统启动程序。在此之前,cron、xinetd、mach_init和init等传统系统负责处理系统初始化、脚本调用、启动项运行以及为用户准备系统。虽然这些系…

作者头像 李华