力扣-20. 有效的括号(回顾知识哈希表,栈)

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

有效字符串需满足:

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

示例 1:

输入:s = “()” 输出:true 示例 2:

输入:s = “()[]{}” 输出:true 示例 3:

输入:s = “(]” 输出:false

思路:
在这里插入图片描述
在这里插入图片描述
匹配过程中,我用的是哈希表

  • 哈希表芝士

1.put(K key, V value) 将键(key)/值(value)映射存放到Map集合中
public class Test {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put(“Tom”, 100);//向HashMap中添加元素
}
}

2.get(Object key) 返回指定键所映射的值,没有该key对应的值则返回 null,即获取key对应的value。 public
class Test {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put(“Tom”, 100);
map.put(“Tom”, 0);
int score = map.get(“Tom”);// 获取key对应的value
System.out.println(score);// key不允许重复,若重复,则覆盖已有key的value
} }
3.size() 返回Map集合中数据数量,准确说是返回key-value的组数。 public class Test {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put(“Tom”, 100);
map.put(“Jim”, 90);
map.put(“Sam”, 91);
System.out.println(map.size());
}
4.containsKey(Object key) Hashmap判断是否含有key public class Test {
public static void main(String[] args) {
HashMap<String, Integer> map=new HashMap<>();
/boolean///判断map中是否存在这个key
System.out.println(map.containsKey(“DEMO”));//false
map.put(“DEMO”, 1);
System.out.println(map.containsKey(“DEMO”));//true
} }

写代码过程中的疑点:
1.哈希表最后的类型是Character,而栈是char类型,那么为什么匹配之后==是true 呢?
java会把character类型自动拆箱为char类型,在比较过程中,实际比较的是char类型的值

2.我一开始使用的是stack!=null来判断栈是否为空为什么错误呢?
因为栈是引用类型的,一开始是new,没有指向任何地方,一直是null,所以不对,你给栈赋值的过程也没有改变栈的指向,引用类型不能用==null判断,可以用size函数或者isEmpty

class Solution {public boolean isValid(String s) {//左括号入栈,遇到匹配的右则出栈//创建哈希表HashMap<Character, Character> h = new HashMap<Character, Character>();h.put('(', ')');h.put('{', '}');h.put('[', ']');//创建栈if(h.containsKey(s.charAt(0))==false){return false;}Stack<Character> stack = new Stack<Character>();for (int i = 0; i < s.length(); i++) {//如果是左括号  入栈if (h.containsKey(s.charAt(i))) {stack.push(s.charAt(i));}//当右括号满足peek的匹配条件,出栈else if (stack.isEmpty()!=true&&s.charAt(i) == h.get(stack.peek())) {stack.pop();}else{return false;}}if(stack.size()!=0)return false;elsereturn  true;}
}

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

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

相关文章

TRACK:使用 Kubo 计算相关电子系统传输特性的 Python 代码

Figure 1 Figure 2 以上是我们分享的一些经验或者文章的搬运&#xff0c;或有不足&#xff0c;欢迎大家指出&#xff01; 如有侵权&#xff0c;请联系我立马删除&#xff01; 详细内容&#xff08;文章题目、文章链接、附件下载&#xff09;可在微 信 公 众 号&#xff1a;原…

vue methods 函数为啥不能是箭头函数

1、首先&#xff0c;因为methods里面的方法中的this是可以拿到data中定义的属性&#xff0c;所以它肯定不是window,但是methods 中 箭头函数里面的this指向window所以methods里面的方法不能定义箭头函数。 下面用代码说明为啥 methods中箭头函数中的this指向window <div i…

【开源】SpringBoot框架开发公司货物订单管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 客户管理模块2.2 商品维护模块2.3 供应商管理模块2.4 订单管理模块 三、系统展示四、核心代码4.1 查询供应商信息4.2 新增商品信息4.3 查询客户信息4.4 新增订单信息4.5 添加跟进子订单 五、免责说明 一、摘要 1.1 项目…

Fix a Tree(树的遍历,判断是否有环 并连成一颗树 )

题意翻译 对于下图中的树&#xff0c; 可以用数组表示为 [2,3,3,2]。这种可以表示树的数组&#xff08;即有效&#xff09;需要符合以下条件&#xff1a; 有且只有一个索引 r &#xff0c;符合pr​r 。其中顶点 r 是树的根。对于所有剩下的 n−1 个顶点 i 一定要有在 i 和 pi…

浏览器同源策略及跨域问题

同源策略&#xff1a;同源策略是一个重要的安全策略&#xff0c;它用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档&#xff0c;减少可能被攻击的媒介。 同源策略的作用&#xff1a;保护浏览器中网站的安全&#xff0c;限制ajax只…

【从零开始构建GPT模型】(四)Linux篇:基于Linux内核的Ubuntu系统安装教程

目录 附&#xff1a;所需工具 一、安装包下载 1、下载安装包 2、注册账户 二、与Windows系统共存安装 1、制作系统启动U盘 2、进入安装界面 3、享受Ubuntu 注&#xff1a;本人为保险起见&#xff0c;并未安装Ubuntu系统&#xff0c;因要待新买一块硬盘之后&#xff0c;将…

深入了解 Spring boot的事务管理机制:掌握 Spring 事务的几种传播行为、隔离级别和回滚机制,理解 AOP 在事务管理中的应用

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &a…

发票OCR-国税可进行的发票查验种类-接口文档

发票查验内容包括发票种类名称、发票代码、发票号码、金额、销售方名称、购买方名称等信息。可以在国家税务总局全国增值税发票查验平台上进行查验&#xff0c;也可以进入发票所属省、直辖市税务局官方网站的“我要查询-发票查询”模块进行查验&#xff0c;企业也可以通过发…

Nacos2.3.1集群部署

Nacos集群部署 1、下载安装包 https://github.com/alibaba/nacos/releases/download/2.3.1/nacos-server-2.3.1.tar.gz2、解压安装包 tar -xf nacos-server-2.3.1.tar.gz3、java环境配置 3.1、下载jdk17 https://download.oracle.com/java/17/archive/jdk-17.0.10_linux-x64…

Vue3自定义指令!!!

通过自定义指令实现菜单显示和权限控制问题。 一、新建一个在src目录下创建包directives&#xff0c;在包中创建一个ts文件。 import { useStore } from "/store/pinia";function hasRoles(role: any) {const pinaRoles useStore().roles;if (typeof role "s…

java枚举与模拟方法

枚举 枚举的定义 枚举算法&#xff08;穷举算法&#xff09;&#xff0c;这种算法就是在解决实际问题的时候去使用所有的方式去解决这个问题&#xff0c;会通过推理去考虑事件发生的每一种可能性&#xff0c;最后推导出结果 优点 简单粗暴&#xff0c;他暴力的枚举所有可能&…

【数据可视化】Echarts最常用图表

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 前言2. 准备工作3. 柱状图3.1 绘制堆积柱状图3.2 绘制标准条形图3.3 绘制瀑布图 4. 折线图4.1 绘制堆积面积图和堆积折线图4.2 绘制阶梯图 5. 饼图5.1 绘制标准饼图5.2 绘制圆环图5.2 绘制嵌套饼图5.3 绘制南丁格尔…