数据结构与算法-有效的括号

devtools/2024/9/24 6:45:33/

数据结构算法-有效的括号

大家好,欢迎来到我们的算法学习系列。今天是我们的第一篇文章,我们将探讨一个经典的面试题目——有效的括号匹配问题。

什么是有效的括号匹配?

在许多编程语言中,括号用于定义代码块、函数参数等。确保这些括号正确匹配是编译器的重要任务之一。而在算法面试中,这个问题常用来考察你的基本数据结构和逻辑思维能力。

问题描述

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

一个有效的字符串需满足:

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

示例

  • 输入: ()
    输出: true
  • 输入: ()[]{}
    输出: true
  • 输入: (]
    输出: false
  • 输入: ([)]
    输出: false
  • 输入: {[]}
    输出: true

解决思路

我们可以使用这种数据结构来解决这个问题。是一种后进先出的数据结构(LIFO)。当我们遇到一个左括号时,我们将其推入中;当我们遇到一个右括号时,我们检查顶的元素是否是对应的左括号,如果是,我们将顶元素弹出。最后,如果为空,则说明所有的括号都匹配了。

实现代码

下面是用JavaScript实现这个算法的代码:

function isValid(s) {const stack = [];const map = {'(': ')','{': '}','[': ']'};for (let i = 0; i < s.length; i++) {if (map[s[i]]) {stack.push(s[i]);} else {const last = stack.pop();if (s[i] !== map[last]) {return false;}}}return stack.length === 0;
}

代码解析

  1. 定义和映射:我们定义一个空 stack 用于存储左括号,并用一个对象 map 存储括号的对应关系。
  2. 遍历字符串:我们遍历输入字符串 s
  3. 处理左括号:如果当前字符是左括号,将其推入中。
  4. 处理右括号:如果当前字符是右括号,弹出顶的左括号,并检查它们是否匹配。
  5. 最终判断:遍历完字符串后,如果为空,则所有的括号匹配成功,返回 true,否则返回 false

小结

今天,我们介绍了有效的括号匹配问题及其解决方法。这是一个经典的算法面试题,重点考察了你对数据结构的理解和应用。明天,我们将进一步探讨更多相关的算法问题,并提供更深入的解析和扩展。

感谢大家的阅读!如果你有任何问题或建议,欢迎在评论区留言。


http://www.ppmy.cn/devtools/43819.html

相关文章

Centos 7下的VulFocus靶场搭建详细教程

一、靶场介绍 自带 Flag 功能&#xff1a;每次启动 flag 都会自动更新&#xff0c;明确漏洞是否利用成功。带有计分功能。兼容 Vulhub、Vulapps 中所有漏洞镜像。 二、下载安装 下载 VMware 软件下载 centos镜像 三、Docker知识 学习链接&#xff1a;https://www.runoob.c…

力扣刷题--2951. 找出峰值【简单】

题目描述 给你一个下标从 0 开始的数组 mountain 。你的任务是找出数组 mountain 中的所有 峰值。 以数组形式返回给定数组中 峰值 的下标&#xff0c;顺序不限 。 注意&#xff1a; 峰值 是指一个严格大于其相邻元素的元素。 数组的第一个和最后一个元素 不 是峰值。 示例…

如何利用Firebase Hosting来托管网站

文章目录 如何利用Firebase Hosting来托管网站前提条件详细步骤1. 安装 Firebase CLI2. 登录 Firebase3. 初始化 Firebase 项目4. 准备网站文件5. 部署到 Firebase6. 配置自定义域名&#xff08;可选&#xff09; 常见问题 如何利用Firebase Hosting来托管网站 以下是更详细的…

AWS安全性身份和合规性之Amazon Detective

分析和直观呈现安全数据&#xff0c;以调查潜在的安全问题。 Amazon Detective使您可以更轻松地分析、调查和快速确定潜在安全问题或可疑活动的根本原因。Amazon Detective会自动从您地AWS资源中收集日志数据并使用机器学习、统计分析和图论来构建一组关联的数据&#xff0c;使…

Flutter 中的 ColoredBox 小部件:全面指南

Flutter 中的 ColoredBox 小部件&#xff1a;全面指南 在 Flutter 的世界中&#xff0c;ColoredBox 是一个用于填充颜色的简单而强大的小部件。它是一个不透明的矩形&#xff0c;可以用来创建颜色块&#xff0c;作为布局的占位符&#xff0c;或者简单地改变某个区域的背景色。…

Llama模型家族之使用 Supervised Fine-Tuning(SFT)微调预训练Llama 3 语言模型(三)通过web页面方式微调

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

第23讲:Ceph集群RBD块存储的离线备份与还原

文章目录 1.RBD块存储的离线备份机制2.RBD块存储的备份导出操作2.1.为RBD块存储设备创建一个快照2.2.基于快照文件备份到本地系统2.3.基于块设备备份到本地系统 3.RBD块存储的备份还原导入操作4.RBD块存储的增量备份与增量还原4.1.增量备份的操作4.2.增量备份的还原操作 1.RBD块…

豆瓣内容抓取:使用R、httr和XML库的完整教程

概述 在数据分析和统计领域&#xff0c;R语言以其强大的数据处理能力和丰富的包库资源而闻名。它不仅提供了一个灵活的编程环境&#xff0c;还拥有专门用于数据抓取和处理的工具&#xff0c;如httr和XML库。这些工具使得从各种网站上抓取数据变得简单而高效。 豆瓣网站作为一个…