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

2023-09-18 21:25:58

一、题目描述

题目连接:有效的括号

给定一个只包括 '('')''{''}''['']' 的字符串 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;   //栈中无任何元素,说明全部匹配成功
}

 

更多推荐

LeetCode19.删除链表的倒数第N个节点

我先用的第一种方法,先第一次遍历算出有节点数num,然后第二次遍历找到第num-n个节点,删除它的下一个节点,也就是第num-n节点.next=num-n节点.next.next(),然后需要注意的是找到第num-n个节点,指针需要从头节点移动num-n-1次,但是后来一直报空指针异常,我反复的检查,一步一步自己推,死

身份和访问管理解决方案:混合型IAM

对于依赖于本地IT基础结构和传统安全模型的组织,可以更轻松地验证和授权企业网络内的所有内容,包括设备、用户、应用程序和服务器。尝试从公司网络外部获取访问权限的用户使用虚拟专用网络(VPN)和网络访问控制(NAC)进行身份验证。随着云和远程工作的日益普及,新的企业架构正在重新定义边界。数据还存储在公司墙外,用户可以通过公

看期权哪个软件更好用?数据比较全面直观的那种?

在介绍期权看盘软件之前,我们先来了解一下期权交易的发展史。2015年,国内首只期权上市交易,2019年深交所期权上市,期权市场越来越火,期权分仓软件也是横空出世发展至今,下文介绍看期权哪个软件更好用?数据比较全面直观的那种?常用的看盘期权软件有:掌上财富、东方财富、同花顺、通达信、文华财经等。一般来说,多数行情走势软件

合同被篡改,被变更,被调换风险大?君子签电子合同有效化解

纸质合同签署文件类型多,签署量大,人为干预较多,合同被篡改,被变更,被调换风险大,难以防范和避免。请注意,出现以下几个情况,代表你已经遭遇合同“调包计”了!1、合同内容被PS篡改利用PS工具可以轻易将预先商定好的合同内容,包括合同金额、时间、日期、数量、报酬、利率等进行修改,还可以对骑缝印文进行拼接处理,盖印痕迹。内容

计算机网络 实验二 交换机的基本配置

实验二交换机的基本配置实验目的•掌握交换机的配置方式及切换命令;•掌握交换机端口的基本配置;•掌握交换机mac地址的查看与管理方法。实验设备以太网交换机一台服务器一台PC机五台配置电缆、网线若干网络拓扑及IP地址分配给计算机Pc0~Pc4配置IP地址,分别是192.168.1.1、192.168.1.2、192.168

【SpringCloud】微服务技术栈入门2 - Nacos框架与Feign

目录Nacos下载Nacos并运行配置NacosNacos集群Nacos负载均衡Nacos环境隔离Nacos注册细节Nacos更多配置项快速上手自动更新Feign取代RestTemplateFeign自定义配置性能优化Nacos下载Nacos并运行首先下载对应的release包,主要要选择已经打包编译好的nacos-s

MongoDB(二)基础操作 创建、删除等

mongodb有一个特点,如果某个库,库下面没数据(mongodb成集合),该库等于不存在的mongodb只要创建一个库,在库下写入数据,该库才会生成mongoshe[-h=host-p=xxx]创建数据库use数据库名#如果数据库名已经存在,则表示切换到这个数据库,如果没有,则创建,但不是持久化到磁盘,查看有权限查看

Linux的常见指令

目录pwd命令ls指令mkdir指令touch指令cd指令rmdir指令&&rm指令man指令nanocp指令mv指令cat指令more指令less指令head指令tail指令grep指令热键zip/unzip指令tar指令uname–r指令输出重定向图形化界面和命令行操作本质都是对操作系统进行直接或间接的操作pwd命

租用独立服务器有哪些常见的误区?

租用独立服务器有哪些常见的误区?如今,租用独立服务器的市场随着idc行业良好的发展趋势而变得越来越广泛,其最明显的地方在于出现了许多的代理商,而成为代理商的门槛非常低,这样一来就会出现许多问题,导致很多企业在面对层出不穷的代理商做选择时,都会非常困扰,因为租用服务器还存在后续使用的售后、机器的质量保障等等,不泛一些不良

Immutable.js简介

引子看一段大家熟悉的代码conststate={str:'wwming',obj:{y:1},arr:[1,2,3]}constnewState=stateconsole.log(newState===state)//truenewState和state是相等的原因:由于js的对象和数组都是引用类型。所以newStat

vue-cli安装与搭建SPA项目

文章目录一、VueCLI1.1脚手架1.2VueCLI1.3安装VueCLI二、用CLI完成spa项目的构建2.1使用脚手架创建项目骨架2.2“一问一答”模式2.3安装项目所需nmp2.4项目结构简介三、基于spa项目完成路由3.1自定义组件3.2创建路由集合3.3挂载四、嵌套路由4.1创建组件4.2创建路由集合4.3

热文推荐