力扣--20. 有效的括号

目录

题目

思路 

注意


题目

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

有效字符串需满足:

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

思路 

不匹配的情况:

  1. 第一种情况,字符串里左方向的括号多余了 ,所以不匹配。 比如:[ { } ]  ( )

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

     2.第二种情况,括号没有多余,但是 括号的类型没有匹配上。 比如 ( [ { } }

      遍历字符串匹配的过程中,发现栈里没有要匹配的字符。所以return false

     3.第三种情况,字符串里右方向的括号多余了,所以不匹配。比如:{([ ])} ) )

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

代码

class Solution {public boolean isValid(String s) {
Deque<Character> stack = new LinkedList<>();//定义一个栈
for(int i=0;i<s.length();i++){//遍历schar c=s.charAt(i);if (c=='('){//这里的思路是只要有左边的要想匹配就得有右括号,所以我遍历考虑左括号,把右边的放入栈中,到时候匹配,如果成功则出栈,若没有则返回falsestack.push(')');}else if (c=='['){stack.push(']');}else if (c=='{'){stack.push('}');}else{if(!stack.isEmpty() && c==stack.peek()){//前面的条件是如果这个括号是)(的话,没有这个条件就会判断错误。因为第一个是),就会直接来到这个else,但是此时栈还是空的,会得到null,但是他还要和前面基本类型的char作比较,所以他会尝试把null转换为基本类型的char,无法按转换就会抛出空指针异常stack.pop();}else{return false;}}
}
return stack.isEmpty(); //最后遍历完如果栈还不为空,那么就不匹配。}}
class Solution {public boolean isValid(String s) {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();}
}

注意

在写c=='('的时候我们用的是单引号,如果用双引号就会报错

  1. 双引号(" "):
  • 双引号用于表示字符串(String),是一个字符序列。
  • 字符串是不可变的,一旦创建后,其内容不能被修改。
  • 用双引号括起来的内容可以包含任意字符,包括字母、数字、符号、空格等

     2.单引号(’ '):

  • 单引号用于表示字符(char),是一个单个字符。
  • 字符是基本数据类型,表示一个Unicode字符,只能包含一个字符。
  • 用单引号括起来的内容只能是单个字符,例如字母、数字、符号,但不能是字符串。

 而在这个代码中我们定义的c属于char类型,所以只能用单引号

还有一个简化操作:要想括号匹配,那么她一定是偶数个,所以可以如果是奇数,可以直接返回false,简化代码

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

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

相关文章

DP讨论——适配器模式

学而时习之&#xff0c;温故而知新。 敌人出招&#xff08;使用场景&#xff09; 说是自己的程序对接第三方的库&#xff0c;但是自己的代码的接口设计完毕了&#xff0c;如何对接上&#xff1f; 你出招 适配器模式就是为此而生的——我觉得应该是该解决方法被命名为了适配…

滞后序列分析案例详解

一个半小时 超出30分钟 日期&#xff1a;2024-07-13 19:14:33 回放 摘要 Python在行为分析中的应用 主要讲述了如何使用Python处理序列数据&#xff0c;以及如何结合定性分析和定量分析来全面分析课程内容。讲者提到了一种叫做分层法的分类方法&#xff0c;该方法使用了布鲁…

ArcGIS Pro SDK (九)几何 2 坐标

ArcGIS Pro SDK &#xff08;九&#xff09;几何 2 坐标 文章目录 ArcGIS Pro SDK &#xff08;九&#xff09;几何 2 坐标1 矢量极坐标2 获取矢量倾角3 获取矢量方位角4 向量运算5 2D 矢量操作6 生成器 环境&#xff1a;Visual Studio 2022 .NET6 ArcGIS Pro SDK 3.0 1 矢量…

知识图谱数据库基本知识

文章目录 知识图谱数据模型知识图谱查询语言随着知识图谱规模的日益增长,数据管理愈加重要。一方面,以文件形式保存的知识图谱显然无法满足用户的查询、检索、推理、分析及各种应用需求;另一方面,传统数据库的关系模型与知识图谱的图模型之间存在显著差异,关系数据库无法有…

ctfshow-web入门-php特性(web96-web99)

目录 1、web96 2、web97 3、web98 4、web99 1、web96 试了下通配、转义、拼接、大小写都不行 这里使用绝对路径或者当前路径绕过&#xff1a; ?u./flag.php ?u/var/www/html/flag.php 还可以使用 php 伪协议&#xff1a; ?uphp://filter/resourceflag.php 2、web97 关…

数据结构(Java):力扣Stack集合OJ题

1、括号匹配问题 . - 力扣&#xff08;LeetCode&#xff09; 1.1 思路分析 根据栈的先进后出原则&#xff0c;我们可以这样解决问题&#xff1a; 遍历字符串&#xff0c;遇见左括号就将左括号push入栈&#xff1b;遇见右括号就pop出栈&#xff0c;将出栈的元素和该右括号比较…

pyparsing开启调试

在要匹配的表达后添加set_debug

【密码学】实现消息认证或数字签名的几种方式

消息认证的目的是验证消息的完整性和确认消息的来源。数字签名的目的是不仅验证消息的完整性和来源&#xff0c;还提供了不可否认性。此外&#xff0c;数字签名还可以验证消息的创建时间&#xff0c;防止重放攻击。那么具体有哪些实现的方式呢&#xff1f; 一、仅提供消息认证…

python练习(if--else)

通过input语句获取键盘输入的身高 判断身高是否超过120cm&#xff0c;并通过print给出提示信息。 代码输出示例&#xff1a; 1.欢迎来到乐园。 请输入你的身高&#xff08;cm&#xff09;&#xff1a;130 您的身高超出120cm&#xff0c;游玩需要够票10元。 祝您游玩愉快。 2…

文件内容查阅

cat concatenate files and print on the standard output Linux中一个最简单的且最常用的命令是cat命令。其功能是在终端设备上显示文件内容。 cat命令-n选项用于显示行号。 tac concatenate and print files in reverse tac命令的功能是用于反向显示文件内容&#xff0c;即…

计算机网络复习笔记【面向考纲整理】

计算机网络复习笔记 一、计算机网络体系结构&#xff08;一&#xff09;计算机网络的概念、分类、组成与功能1.计算机网络的概念、组成与功能1.1计算机网络的概念1.2计算机网络的组成1.3计算机网络的功能 2.计算机网络的分类3.计算机网络的标准化工作及相关知识 &#xff08;二…

MT6816磁编码IC在工控机器人中的应用

在现代工业自动化领域&#xff0c;高精度的位置检测和控制技术对于机器人系统的稳定运行至关重要。MT6816磁编码IC作为一款先进的磁传感器解决方案&#xff0c;以其卓越的性能和稳定性&#xff0c;在工控机器人中得到了广泛的应用。本文将详细探讨MT6816磁编码IC在工控机器人中…

azure学习在日本IT工作的重要性

在日本数字化转型的浪潮中,微软Azure已经成为众多企业的首选云平台。作为全球第二大云服务提供商,Azure在日本市场的重要性与日俱增。本文将探讨为什么学习Azure对日本IT专业人士至关重要,以及如何通过lalapodo云原生技术的培训课程,快速掌握这一关键技能。 Azure在日本的战略地…

血液及造血系统疾病病人的护理

一、血液及造血系统疾病病人的基础护理 对于患有血液及造血系统疾病的病人&#xff0c;护理工作的重点首先在于密切监测生命体征&#xff0c;包括体温、心率、呼吸频率和血压。 饮食护理也十分关键&#xff0c;要保证病人摄入充足的营养&#xff0c;以增强抵抗力。例如&#xf…

【Django+Vue3 线上教育平台项目实战】构建高效线上教育平台之首页模块

文章目录 前言一、导航功能实现a.效果图&#xff1a;b.后端代码c.前端代码 二、轮播图功能实现a.效果图b.后端代码c.前端代码 三、标签栏功能实现a.效果图b.后端代码c.前端代码 四、侧边栏功能实现1.整体效果图2.侧边栏功能实现a.效果图b.后端代码c.前端代码 3.侧边栏展示分类及…

element UI时间组件两种使用方式

加油&#xff0c;新时代打工&#xff01; 组件官网&#xff1a;https://element.eleme.cn/#/zh-CN/component/date-picker 先上效果图&#xff0c;如下&#xff1a; 第一种实现方式 <div class"app-container"><el-formref"submitForm":model&q…

Linux C++ 052-设计模式之享元模式

Linux C 052-设计模式之享元模式 本节关键字&#xff1a;Linux、C、设计模式、享元模式 相关库函数&#xff1a; 概念 享元模式&#xff08;FlyWeight&#xff09;&#xff0c;运用共享技术有效的支持大量细粒度的对象。 典型的享元模式的例子为文书处理器中以图形结构来表…

探索 Prompt 的世界:让你的 AI 更智能

探索 Prompt 的世界&#xff1a;让你的 AI 更智能 引言什么是 Prompt&#xff1f;Prompt 的重要性如何编写有效的 Prompt1. 清晰明确2. 包含关键细节3. 提供上下文 实践中的 Prompt 技巧1. 多次迭代2. 实验不同风格3. 结合实际应用 总结 引言 随着人工智能&#xff08;AI&…

数据恢复篇:适用于 Android 的恢复工具

正在摆弄 Android 设备。突然&#xff0c;您意外删除了一张或多张图片。不用担心&#xff0c;您总能找到一款价格实惠的照片恢复应用。这款先进的软件可帮助 Android 用户从硬盘、安全数字 (SD) 或存储卡以及数码相机中恢复已删除的图片。 Android 上文件被删除的主要原因 在获…

采用自动微分进行模型的训练

自动微分训练模型 简单代码实现&#xff1a; import torch import torch.nn as nn import torch.optim as optim# 定义一个简单的线性回归模型 class LinearRegression(nn.Module):def __init__(self):super(LinearRegression, self).__init__()self.linear nn.Linear(1, 1) …