LeetCode Hot100 20.有效的括号

题目

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

有效字符串需满足:

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

方法

由于栈结构的特殊性,非常适合做对称匹配类的题目。

首先要弄清楚,字符串里的括号不匹配有三种情况:

第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false, 缺少右括号

第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字符。所以return false, 栈顶不匹配

第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false, 缺少左括号

那么什么时候说明左括号和右括号全都匹配了呢,就是字符串遍历完之后,栈是空的,就说明全都匹配了

但还有一些技巧,在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶相不相等就可以了,比左括号先入栈代码实现要简单的多了

代码

class Solution {public boolean isValid(String s) {// Deque双端队列,头部、尾部都可以插入、删除元素// push插入头部、peek从头部取出返回但不删除、pop删除头部并且不返回// addFirst()、getFirst()、removeFirst()  头部操作// addLast() 、getLast() 、removeLast()   尾部操作// 可以实现 栈、队列、双向队列Deque<Character> deque = new LinkedList<>();char ch;for (int i = 0; i < s.length(); i++) {ch = s.charAt(i);// 碰到左括号,就把相应的右括号入栈if (ch == '(')deque.push(')');else if (ch == '[') deque.push(']');else if (ch == '{')deque.push('}');else if (deque.isEmpty() || deque.peek() != ch)  // 栈为空或者不匹配return false;else deque.pop();  // 匹配}return deque.isEmpty();}
}

重点:通过Deque掌握队列、栈、双端队列

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

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

相关文章

Java核心知识点整理大全19-笔记

目录 14.1.5.2. MemStore 刷盘 全局内存控制 MemStore 达到上限 RegionServer 的 Hlog 数量达到上限 手工触发 关闭 RegionServer 触发 Region 使用 HLOG 恢复完数据后触发 14.1.6.HBase vs Cassandra 15. MongoDB 15.1.1. 概念 15.1.2. 特点 16. Cassandra 16.1.1…

通过内存标记扩展(MTE)提供增强的安全性

目录 一、内存安全BUG导致的安全漏洞 二、检测和修复内存安全漏洞的难点 三、MTE如何应对这一挑战

Day 12 周日和周一

每日博客Day 12 每日算法 三数之和 这个代码是肯定跑不了的&#xff0c;但是我个人最开始的想法确实是差不多这个样子的 class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {//两层for循环来确定ab的数值&#xff0c;然后再去…

MATLAB实战 | 不同形式的三维曲面图

通常&#xff0c;MATLAB中绘制三维曲面图&#xff0c;先要生成网格数据&#xff0c;再调用mesh函数和surf函数绘制三维曲面。若曲面用含两个自变量的参数方程定义&#xff0c;则还可以调用fmesh函数和fsurf函数绘图。若曲面用隐函数定义&#xff0c;则可以调用fimplicit3函数绘…

【JUC】十三、CompletableFuture的常用方法

文章目录 1、获得结果和触发计算2、对计算结果进行处理3、对结算结果进行消费4、CompletableFuture的thenXX和thenXXAsync5、对计算速度进行选用6、对计算结果进行合并 1、获得结果和触发计算 获取任务结果 public T get()public T get(long timeout, TimeUnit unit)public T…

wpf 使用 StringFormat

在xaml里使用StringFormat,将两个字符串拼起来&#xff0c;一个字符串时固定不变的&#xff0c;一个字符串是动态绑定&#xff0c;如&#xff1a;平均密度&#xff1a;绑定的值 代码如下&#xff1a; <TextBlock Margin"0,0,0,0" Text"{Binding CellAverage…

STM32F103C8T6——4路PWM

//main()函数前面的extern TIM_HandleTypeDef htim2;extern TIM_HandleTypeDef htim3;//main()函数内部额外添加的HAL_TIM_Base_Start_IT(&htim2);HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);HAL_TIM_PWM_Start(&htim2…

SpringBoot注入Bean的几种方式

目录 统一测试类与config类 1. 启动类注入Bean 2.启动类扫描ComponentScan 3.启动类EnableConfigurationProperties 4.启动类Import 统一测试类与config类 yml student:red: dou config Configuration注解 与 Component注解都可以。 Data Configuration Configuratio…

v-clock

v-clock 给元素上加了这个属性&#xff0c;初始值为display&#xff1a;none&#xff0c;登vue的文件编译结束后再删除这个元素&#xff0c;回显编译后的元素和数据 <body><div id"app"></div><template id"my-app"><h2 v-cl…

013 C++ set与map的用法

前言 本文将会向你介绍set与map的主要用法 set详解 int main() {set<string> s;vector<string> v { "Fan1","Fan2", "Fan3", "Fan4" };for (auto e : v){s.insert(e);}string input;while (cin >> input){if (s.…

重装linux后需要做的配置

1. linux中 vim如果输入中文乱码 打开/etc/vim/vimrc输入&#xff1a; set fileencodingsutf-8,gbk set termencodingutf-8 set encodingutf-8 把vim的缩进格式顺便改了 http://t.csdnimg.cn/K3ncc 2. 配置sudo授权用户 3. 新导入项目后 , chmod -R x 添加权限 4. 查询主机i…

数组题目:118. 杨辉三角 、 119. 杨辉三角 II 、661. 图片平滑器 、598. 范围求和 II 、 419. 甲板上的战舰

118. 杨辉三角 思路&#xff1a; 找规律&#xff0c;每一行的第一个元素和最后一个元素都是1&#xff0c;其中中间需要改变的数找对应的规律 比如第二行&#xff08;从0开始&#xff09;的2&#xff0c;是dp[1][0] dp[1][1]。类似的找出对应的规律 代码&#xff1a; clas…

题目标题 abc+cba=1333 c语言

题目描述&#xff1a; 已知abccba1333&#xff0c;其中a,b,c均为一位数&#xff0c;编程求出所有满足条件的a,b,c所有组合。 &#xff08;知识点&#xff1a;控制语句&#xff09; 输入描述&#xff1a; 无 输出描述&#xff1a; 输出数据为多组&#xff0c;每组三个整形数…

【网络安全】-常见的网站攻击方式详解

文章目录 介绍1. SQL 注入攻击攻击原理攻击目的防范措施 2. 跨站脚本攻击&#xff08;XSS&#xff09;攻击原理攻击目的防范措施 3. CSRF 攻击攻击原理攻击目的防范措施 4. 文件上传漏洞攻击原理攻击目的防范措施 5. 点击劫持攻击原理攻击目的防范措施 结论 介绍 在数字时代&a…

【实践】Deployer 发布到search head : local OR default

1: 背景: search head deployer 上的 /opt/splunk/etc/schcluster/apps 下面的local, 还有default 派发到 search head 到app 下面是怎么工作的,这个过程,实践了一下: 参考Use the deployer to distribute apps and configuration updates - Splunk Documentation 2: 实…

aspera传输方案怎么样,需要选择aspera替代方案吗

Aspera传输方案是一种高速、可靠的文件传输解决方案&#xff0c;适用于需要大规模传输大文件或数据集的企业和组织。Aspera采用UDP协议及自己开发的FASP协议进行加速传输&#xff0c;能够在高延迟、高丢包网络环境下实现稳定快速的传输。 Aspera传输方案具有以下优点&#xff1…

Selenium Grid

Selenium Grid 什么是Selenium Grid Selenium是Selenium套件的一部分,它专门用于并行运行多个测试用例在不同的浏览器、操作系统和机器上 Selenium Grid的两个版本 Grid1与Grid2两个版本的原理和基本工作方式完全相同&#xff0c;Grid2同时支持Selenium1和Selenium2&#x…

<JavaEE> Thread线程类 和 Thread的常用方法

目录 一、Thread概述 二、构造方法 三、常用方法 1.1 getId()、getName()、getState()、getPririty() 1.2 start() 1.3 isDaemon()、setDaemon() 1.4 isAlive() 1.5 currentThread() 1.6 Interrupt()、interrupted()、isInterrupted() 1.6.1 方法一&#xff1a;添加共…

stream流和方法引用

1.Stream流 1.1体验Stream流【理解】 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合&#xff0c;存储多个字符串元素把集合中所有以"张"开头的元素存储到一个新的集合把"张"开头的集合中的长度为3的元素存储到一个新的集合遍历上一步得到的集…

SIT65HVD75,可替代SN65HVD75,3.0~5.5V 供电,ESD 15kV HBM,20Mbps 半双工 RS485/RS422 收发器

SIT65HVD75 是一款 3.0V~5.5V 电源供电、总线端口 ESD 保护能力 HBM 达到 15kV 以上、 总线耐压范围达到 15V 、半双工、低功耗&#xff0c;功能完全满足 TIA/EIA-485 标准要求的 RS-485 收发 器。 SIT65HVD75 包括一个驱动器和一个接收器&#xff0c;两者均可…