有效的括号(栈的高频面试题)

news2024/11/25 4:01:28

一、题目描述

题目连接:有效的括号

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

输出需求

示例 1:

输入:s = "()"
输出:true

示例 2:

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

示例 3:

输入:s = "(]"
输出:false

 二、题目思路

🍎  括号匹配是使用 解决的经典问题 ,其思路如下:

       遍历字符串,遇到左括号,将左括号与之对应的右括号入栈;将栈中的括号与右括号进行对比,一样就出栈。遍历完之后若栈为空,则字符有效, return ture .

 🍐  在解决一些问题时,我们首先要考虑这些问题的极端性

 🍉  首先分析不匹配的情况,一共有三种情况:

       1️⃣:左括号多余

 

     
        当遍历完字符串后栈不为空,则说明有多余的左括号,return flase.

   2️⃣: 右括号多余
 

    当遍历过程中遇到右括号时,栈为空,则说明右括号多余,return false.

 3️⃣: 括号没有多余,但是括号的类型没有对应上。
 

    当遍历过程中遇到右括号时,栈顶元素与之不对应,则说明括号的类型没有对应上,return false.
 

三、问题实现

// 用栈解决
// 数组模拟栈
bool isValid(char * s)
{ 
    // 计算 原数组长度
    int len = strlen(s);
    // 先重新开辟一个动态数组来存储栈 (在堆上开辟)
    int* stack = (int*)malloc(sizeof(int)*len);
    // 记录插入栈中的数据个数
   int count = 0;        // 此时count指向的是栈中有效数据的下一个位置  也就是栈顶指针
   // 开始遍历整个数据
   for(int i = 0; i < len; i++)
   {
       // 开始遍历      先遍历左括号在遍历右括号
       if(s[i]=='(')
       {
           stack[count++] = ')';
       }
       else if(s[i]=='[')
       {
           stack[count++] = ']';
       }
       else if(s[i]=='{')
       {
           stack[count++] = '}';
       }
       // count=0 表示 右括号多余
       // stack[count-1]=s[i] 表示 类型没对上
       else if(count==0||stack[count-1]!=s[i])
       {
           return false;
       }
       else
       {
           count--;
       }
   }

   // 当遍历完整个数组,栈理应为空,如果栈没空 表示左括号多余
   return count==0;   //栈中无任何元素,说明全部匹配成功
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1020547.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我的创作纪念日 · 开始创作的第128天~

我的创作纪念日 开始创作的第128天 1️⃣ 机缘2️⃣ 收获3️⃣ 日常4️⃣ 憧憬 1️⃣ 机缘 时光匆匆&#xff0c;春去秋来&#xff0c;2023年在CSDN下笔的128天已去&#xff0c;回想当初成为创作者的初心&#xff0c;现在的心境已截然不同。当时正值上家公司工作变动&#xf…

【大数据】Doris 构建实时数仓落地方案详解(二):Doris 核心功能解读

Doris 构建实时数仓落地方案详解&#xff08;二&#xff09;&#xff1a;Doris 核心功能解读 1.Doris 发展历程2.Doris 三大模型3.Doris 数据导入4.Doris 多表关联5.Doris 核心设计6.Doris 查询优化7.Doris 应对实时数仓的痛点 1.Doris 发展历程 Apache Doris 是由 百度 研发并…

华为云云耀云服务器L实例评测|用Python的Flask框架加Nginx实现一个通用的爬虫项目

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;AWS/阿里云资深使用…

QUIC协议报文解析(三)

在前面的两篇文字里我们简单介绍了QUIC的发展历史&#xff0c;优点以及QUIC协议的连接原理。本篇文章将会以具体的QUIC报文为例&#xff0c;详细介绍QUIC报文的结构以及各个字段的含义。 早期QUIC版本众多&#xff0c;主要有谷歌家的gQUIC&#xff0c;以及IETF致力于将QUIC标准…

数据结构之堆的结构与实现

目录 一、堆的概念及结构 1.1堆的概念 1.2堆的性质 1.3堆的结构 二、堆的实现 2.1堆向下调整算法&#xff08;父亲与孩子做比较&#xff09; 2.2堆的向上调整算法&#xff08;孩子与父亲做比较&#xff09; 2.3堆的创建&#xff08;向下建堆&#xff09; 2.4向下建堆的时…

26 WEB漏洞-XSS跨站之订单及Shell箱子反杀记

目录 xss平台及工具使用session与Cookie获取问题演示案例某营销订单系统XSS盲打_平台某Shell箱子系统XSS盲打_工具其他参考应用案例-后台权限维持工具Http/s数据包提交Postman使用 xss平台及工具使用 凡是有数据交互的地方&#xff0c;前端是接收数据的&#xff0c;后端是要把…

Android Kotlin 高阶详解

前言 本文主要讲述kotlin高阶相关的内容&#xff0c;如果对kotlin基础还不了解的&#xff0c; 可以参考文章Android Kotlin 基础详解_袁震的博客-CSDN博客 1&#xff0c;与Java的相互调用 1.1在kotlin中调用java代码 大多数的java代码都可以直接在kotlin中调用&#xff0c…

Spring Cloud Alibaba Nacos注册中心(单机)

文章目录 Spring Cloud Alibaba Nacos注册中心&#xff08;单机&#xff09;1. docker 安装 nacos&#xff08;先别着急&#xff09;2. 配置nacos持久化到mysql、2.1 properties 文件 3. java注册3.1 POM文件3.2 properties文件3.3 测试配置中心 4.注册中心4.1 配置文件4.2测试…

【八大经典排序算法】选择排序

【八大经典排序算法】选择排序 一、概述二、思路解读三、代码实现&#xff08;升序&#xff09;四、优化&#xff08;升序&#xff09; 一、概述 选择排序作为一种简单直观的排序算法&#xff0c;最早由美国计算机科学家 Donald Knuth 在1968年提出。 选择排序的思想是将数组…

小程序从无到有教学教程-- 01.重置华为云服务器Huawei Cloud EulerOS 2.0版本并且设置安全组

概述 专门拿了专栏来讲解&#xff0c;所以目录结构就比较简单了 文章目录 概述修改华为云操作系统选择Huawei Cloud EulerOS 2.0 镜像顺便配置华为安全组 修改华为云操作系统 这里选择华为最新的系统&#xff0c;不过也就2.0~ 选择Huawei Cloud EulerOS 2.0 镜像 这里记住密…

企业架构LNMP学习笔记61

Nginx作为tomcat的前段反向代理&#xff1a; 在实际业务环境中&#xff0c;用户是直接通过域名访问&#xff0c;基于协议一般是http、https等。默认tomcat运行在8080端口。一般会通过前端服务器反向代理到后端的tomcat的方式&#xff0c;来实现用户可以通过域名访问tomcat的we…

bat写的git命令大全(适合初学者)掌握命令行下的Git操作!

欢迎来到Git&#xff01;无论你是一位Git初学者&#xff0c;这个在命令大全将帮助你在命令行下熟练运用Git&#xff0c;提高版本控制和团队协作的效率。从基本的仓库管理到分支操作&#xff0c;从提交修改到远程仓库同步&#xff0c;这个命令大全涵盖了Git的各种常用功能和技巧…

LeetCode-热题100-笔记-day31

105. 从前序与中序遍历序列构造二叉树https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/ 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c…

QT-day2

完善登录框 点击登录按钮后&#xff0c;判断账号&#xff08;admin&#xff09;和密码&#xff08;123456&#xff09;是否一致&#xff0c;如果匹配失败&#xff0c;则弹出错误对话框&#xff0c;文本内容“账号密码不匹配&#xff0c;是否重新登录”&#xff0c;给定两个按钮…

【QT】day2

1.完善登录框 点击登录按钮后&#xff0c;判断账号&#xff08;admin&#xff09;和密码&#xff08;123456&#xff09;是否一致&#xff0c;如果匹配失败&#xff0c;则弹出错误对话框&#xff0c;文本内容“账号密码不匹配&#xff0c;是否重新登录”&#xff0c;给定两个按…

孙哥Spring源码第23集

第23集 finishBeanFactoryInitialization处理过程 1、处理国际化&#xff0c;事件操作&#xff0c;onRresh()的操作&#xff0c;注册监听器。 2、finishBeanFactoryInitialization(beanFactory)核心目的 通过Spring的BeanFactory创建单例&#xff08;非延迟&#xff09;这些对…

mongodb 无法远程连接

在本机可以通过 mongo 命令进行连接&#xff0c;但是外部无法连接&#xff0c;排查以下两个方面&#xff1a; 一&#xff0c;检查防火墙是否未开放端口 如果不确定&#xff0c;可以先关闭防火墙再试 二&#xff0c;查看mongodb启动时绑定的ip 执行如下命令&#xff1a; nets…

织梦CMS_V5.7任意用户密码重置漏洞复现

一、漏洞说明 织梦内容管理系统&#xff08;DeDeCMS&#xff09;以其简单、实用、开源的特点而著名。作为国内最知名的PHP开源网站管理系统&#xff0c;它在多年的发展中取得了显著进步&#xff0c;无论在功能还是易用性方面都有长足的发展。该系统广泛应用于中小型企业门户网站…

Linux集群时间同步方法

参考&#xff1a;https://www.cnblogs.com/felixzh/p/10638399.html