力扣-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;
        else
        return  true;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QT中dumpcpp以及dumpdoc使用

qt中调用COM的方式方法有四种&#xff0c;参考解释在 Qt 中使用 ActiveX 控件和 COM (runebook.dev) 介绍dumpcpp的使用方法Qt - dumpcpp 工具 (ActiveQt) (runebook.dev)&#xff1a; 在安装好了的qt电脑上&#xff0c;通过powershell窗口来实现&#xff0c;powershell比cmd要…

C语言从入门到熟悉------第五阶段

结构体 结构体很重要&#xff0c;一定要掌握。但是在很多C语言书籍中结构体的内容讲得非常少&#xff0c;因为从结构体开始&#xff0c;后面介绍的内容已经超出C语言基础的范畴&#xff0c;属于C高级编程部分了。仅仅具备前面的知识是远远不够的&#xff0c;因为在实际编程中&…

#QT(定时轮播电子相册)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a; &#xff08;1&#xff09;使用QOBJECT的TIMER &#xff08;2&#xff09;EVENT时间 &#xff08;3&#xff09;多定时器定时溢出判断 &#xff08;4&#xff09;QLABEL填充图片 3.记录 4.代码 widget.h #ifndef WIDGET_H…

AI - 决策树模型

&#x1f914;决策树算法 决策树的思想来源可以追溯到古希腊时期&#xff0c;当时的哲学家们就已经开始使用类似于决策树的图形来表示逻辑推理过程。然而&#xff0c;决策树作为一种科学的决策分析工具&#xff0c;其发展主要发生在20世纪。 在20世纪50年代&#xff0c;美国兰…

【消息队列开发】 测试MessageFileManager(对硬盘中的消息操作)类

文章目录 &#x1f343;前言&#x1f384;测试流程&#x1f334;准备工作&#x1f332;测试创建队列功能&#x1f333;测试统计文件的读写&#x1f38b;测试将相应消息放入文件中&#x1f38d;测试读文件里的消息到内存&#x1f340;测试删除消息&#x1f60e;测试垃圾回收⭕总…

AtomoVideo:AIGC赋能下的电商视频动效生成

✍&#x1f3fb; 本文作者&#xff1a;凌潼、依竹、桅桔、逾溪 1. 概述 当今电商领域&#xff0c;内容营销的形式正日趋多样化&#xff0c;视频内容以其生动鲜明的视觉体验和迅捷高效的信息传播能力&#xff0c;为商家创造了新的机遇。消费者对视频内容的偏好驱动了视频创意供给…

Yolo系列算法-理论部分-YOLOv3

0. 写在前面 YOLO系列博客&#xff0c;紧接上一篇Yolo系列算法-理论部分-YOLOv2-CSDN博客 1. YOLOv3-定型之作 2018年&#xff0c;Redmon团队推出YOLOv3的网络模型&#xff0c;将骨干网络&#xff08;backbone&#xff09;由darknet-19替换成darknet-53网络&#xff0c;加入特…

【Python循环2/5】for循环的复杂应用

目录 序言 导入1 累加 练习 导入2 计数器 练习 导入3 if判断 总结 序言 昨天&#xff0c;我们学习了 for 循环遍历列表、字典等数据的方式。今天我们会学习&#xff0c;for 循环与“累加” 、if 判断和“计数器”的结合运用。 导入1 在前面的学习中&#xff0c;我们学…

计算机网络——物理层(数据交换方式)

计算机网络——数据交换方式 提高数据交换方式的必要性电路交换电路交换原理电路交换的阶段建立阶段通信阶段和连接拆除阶段 电路交换的优缺点报文交换什么是报文报文交换的阶段报文交换的优缺点 分组交换分组交换的阶段分组交换的优缺点 数据交换方式的选择数据报方式数据报方…

VS Code上,QT基于cmake,qmake的构建方法(非常详细)

VS Code上,QT基于cmake&#xff0c;qmake的构建方法 1 前言2 QT基于cmake的构建方法2.1 VS Code关键插件安装2.2 系统环境变量配置2.3 VS Code中&#xff0c;环境变量配置2.4 Cmake新建一个新的Porject 3 QT基于qmake的构建方法 1 前言 最近&#xff0c;由于认证了github的学生…

尺寸小又薄的整流桥IBS

1. 整流桥功能介绍 整流桥在电子领域中扮演着至关重要的角色&#xff0c;为各种电子设备和电路提供了稳定的电源。整流桥的主要作用是将交流电信号转换为直流电信号。当交流电信号通过整流桥时&#xff0c;它会使得只有一个方向的电流能够通过&#xff0c;从而实现了将交流电信…

【数据结构练习题】栈——1.括号匹配 2.逆波兰表达式求值 3.出栈入栈次序匹配 4.最小栈

♥♥♥♥♥个人主页♥♥♥♥♥ ♥♥♥♥♥数据结构练习题总结专栏♥♥♥♥♥ 文件目录 前言1.括号匹配1.1问题描述1.2解题思路1.3画图解释1.4代码实现2.逆波兰表达式求值 2.1问题描述2.2解题思路2.3画图解释2.4代码解释3.出栈入栈次序匹配 3.1问题描述3.2思路分析3.3画图解释3.…

金融知识分享系列之:MACD指标精讲

金融知识分享系列之&#xff1a;MACD指标精讲 一、MACD指标二、指标原理三、MACD指标参考用法四、MACD计算步骤五、MACD分析要素六、根据快线DIF位置判断趋势七、金叉死叉作为多空信号八、快线位置交叉信号九、指标背离判断行情反转十、差离值的正负十一、差离值的变化十二、指…

KBP210-ASEMI新能源专用整流桥KBP210

编辑&#xff1a;ll KBP210-ASEMI新能源专用整流桥KBP210 型号&#xff1a;KBP210 品牌&#xff1a;ASEMI 封装&#xff1a;KBP-4 正向电流&#xff08;Id&#xff09;&#xff1a;2A 反向耐压&#xff08;VRRM&#xff09;&#xff1a;1000V 正向浪涌电流&#xff1a;6…

中整协与成都艺星联合主办的“面部馒化修复注射技术培训班”圆满落下帷幕

在追求医疗美容学科深度的道路上&#xff0c;Yestar成都艺星再次成为行业先锋&#xff0c;近日&#xff0c;由中整协与成都艺星整形美容医院联合主办的“面部馒化修复注射技术培训班”在Yestar成都艺星圆满落下帷幕。本次培训班以其严谨的学术精神和对临床治疗思路的深入解读&a…

在idea中配置tomcat服务器,部署一个项目(下载教程加链接)

第一步&#xff1a;把Tomcat下载好 ww​​​​​​​Apache Tomcat - Welcome! 链接如上&#xff1a;进去后在左边找到Tomcat8点击进去后 找到图下内容 第二步&#xff1a; 打开这个文件点击bin进去 会出现一个黑色框框&#xff0c;也就是服务器 完成后就可以在浏览器输入…

Redis 搭建主从集群

文章目录 1. 主从集群架构1.1 准备实例和配置1.2 启动1.3 开启主从关系1.4 测试 2. 主从同步原理2.1 全量同步2.2 增量同步repl_backlog原理 2.3 主从同步优化小结 单节点的 Redis 并发能力有限&#xff0c;要进一步提高 Redis 的并发能力&#xff0c;就需要搭建主从集群&#…

2024年无人直播是否已经成为新趋势,商家使用矩图AI无人直播月增长5万+

无论是 个体商户、企业经营者、电商从业者、想创业赚钱的朋友;也不管你是做餐饮还是非餐饮;亦或是抖音小时达外卖。这篇文章&#xff0c;请勿必看完&#xff0c;对你的业绩增长是有绝对的帮助。 无人直播的发展经历了几个时代&#xff0c;现在已经到了4.0的时代&#xff0c;更安…

刷题DAY24 | LeetCode 77-组合

1 回溯法理论基础 回溯法也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。回溯是递归的副产品&#xff0c;只要有递归就会有回溯。 所以以下讲解中&#xff0c;回溯函数也就是递归函数&#xff0c;指的都是一个函数。 1.1 回溯法的效率 回溯法的性能如何呢&#xff0…

深入探索Java并发编程:ArrayBlockingQueue详解

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 在Java的并发编程世界中&#xff0c;java.util.concurrent包为我们提供了多种用于线程间安全通信的数据结构&#xff0c;其中Arra…