力扣-20 有效的括号详解 Java

目录

1.题目分析

2.基础知识储备

2.1 哈希表 

2.2 栈的存取

3. 逻辑概要

4.源码 示例


1.题目分析

为了对比都是从内而外,一个个匹配,全部匹配成功即为有效字符

2.基础知识储备

2.1 哈希表 

简单来说,key+value存储 ,通过key能找到对应value值

这里 可以将 一边括号 存为key  ,另一边存为 value ,建立二者联系,便于匹配比较

 Map<Character,Character> pairs = new HashMap<Character,Character>(){{put('}','{');put(')', '(');put(']','[');}};

2.2 栈的存取

调用已定义好的Stack类,控制符号的进出

  Stack stack = new Stack();stack.isEmpty();stack.peek();stack.pop();stack.push(ch);

3. 逻辑概要

‘{ ’匹配 ‘}’, 左边括号入栈 存放,后边括号就要来比较

                 (1)栈的先入后出特性  正好帮我们由内到外比较符号对应问题

                 (2)哈希表的key-value正好帮助我们为符号匹配提供参考依据  

                 (3) 判断整个式子是不是正确的,那么过程中有问题直接return false或抛异常,

如果所有字符都看完了,最后都没问题,一定要检查栈内【防止'{{'出现】,栈空才为 ture

4.源码 示例

import java.util.Deque;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Stack;public class Solution {public boolean isValid(String example){int length = example.length();//条件一,单数的不要if (length%2 == 1) {return false;}//左括号入栈,右括号就比较Map<Character,Character> pairs = new HashMap<Character,Character>(){{put('}','{');put(')', '(');put(']','[');}};// Deque<Character> stack = new LinkedList<>();Stack stack = new Stack();//开始逐个提取字符for(int i = 0 ; i<length ; i++){char ch = example.charAt(i);if (pairs.containsKey(ch)) {if (stack.isEmpty() || pairs.get(ch) != stack.peek()) {return false;}// 以stack.pop();}else{stack.push(ch); }}//一定栈空了才可以算匹配成功return stack.isEmpty();}
}

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

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

相关文章

面试经典150题【91-100】

文章目录 面试经典150题【91-100】70.爬楼梯198.打家劫舍139.单词拆分322.零钱兑换300.递增最长子序列77.组合46.全排列39.组合总和&#xff08;※&#xff09;22.括号生成79.单词搜索 面试经典150题【91-100】 五道一维dp题五道回溯题。 70.爬楼梯 从递归到动态规划 public …

九州金榜|孩子产生厌学心理应该怎么办?

孩子厌学孩子在成长学习过程中的一个经历&#xff0c;也是家长在对孩子教育中遇到的一大挑战&#xff0c;孩子产生厌心理家长要怎么办呢&#xff1f;很多家长会对此很无奈&#xff0c;下面九州金榜家庭教育给几个方法&#xff0c;帮助家长疏导孩子厌学心理。 来百度APP畅享高清…

vue3 报错 require is not defined

问题 require is not defined 原因 vite 不支持require的用法&#xff0c; webpack是支持的 解决 方法一&#xff1a; 更改vite使用语法 vite官网 方法二 安装转换插件vite-plugin-require-transform 仓库地址 参考 关于Vite不能使用require问题 方法二Vite 踩坑 —— …

Django之Celery篇(一)

一、介绍 Celery是由Python开发、简单、灵活、可靠的分布式任务队列,是一个处理异步任务的框架,其本质是生产者消费者模型,生产者发送任务到消息队列,消费者负责处理任务。 Celery侧重于实时操作,但对调度支持也很好,其每天可以处理数以百万计的任务。特点: 简单:熟悉…

安卓转鸿蒙竟如此丝滑

随着鸿蒙的爆火&#xff0c;大家都想知道鸿蒙能不能搞&#xff1f; 相信大家搞开发的&#xff0c;都多多少少的了解过鸿蒙。近几个月鸿蒙的大动作也不少&#xff0c;如&#xff1a;重庆市近20个垂域应用与鸿蒙原生合作、深圳制定鸿蒙《行动计划》、阿里再次与鸿蒙展开合作&…

【好书推荐2】AI提示工程实战:从零开始利用提示工程学习应用大语言模型

【好书推荐2】AI提示工程实战&#xff1a;从零开始利用提示工程学习应用大语言模型 写在最前面AI辅助研发方向一&#xff1a;AI辅助研发的技术进展方向二&#xff1a;行业应用案例方向三&#xff1a;面临的挑战与机遇方向四&#xff1a;未来趋势预测方向五&#xff1a;与法规的…

32.网络游戏逆向分析与漏洞攻防-游戏网络通信数据解析-网络数据分析原理与依据

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;31.其它消息的实…

隐语技术架构

隐语架构 产品定位 算法层 计算层 密码原语 互联互通–资源层 总结

Java使用itextpdf往pdf中插入图片

引入maven依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.9</version> </dependency>java代码 import cn.hutool.extra.qrcode.QrCodeUtil; import com.itextpdf.text.*; i…

redis在docker安装并启动流程

1、启动server docker run -d -p 6379:6379 --name redis01 redis:7.2.4以上命令&#xff0c;每次启动新的Redis容器&#xff0c;数据会丢失。 我们需要挂载数据文件&#xff0c;在宿主机上面&#xff0c;这样就可以持久化数据. 2、挂载数据文件&#xff08;可根据需求选择…

【vue3(七)】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、ref二、TS接口泛型规范1.创建ts文件&#xff0c;定义接口2.引入规范 三、props的使用四、生命周期&#xff08;生命周期函数&#xff0c;生命周期钩子&…

c++翁恺

1、面向对象 Data&#xff1a;杯子的属性 Opera&#xff1a;杯子提供的服务 老师上课&#xff1a; C&#xff1a;按流程执行 C&#xff1a;定一个教室&#xff0c;有很多学生&#xff0c;投影仪&#xff0c;灯&#xff0c;每个学生反映不一样。 这个场景有什么东西&#xff0c…

C语言例4-7:格式字符f的使用例子

%f&#xff0c;实型&#xff0c;小数部分为6位 代码如下&#xff1a; //格式字符f的使用例子 #include<stdio.h> int main(void) {float f 123.456;double d1, d2;d11111111111111.111111111;d22222222222222.222222222;printf("%f,%12f,%12.2f,%-12.2f,%.2f\n&qu…

补充--广义表学习

第一章 逻辑结构 &#xff08;1&#xff09;A()&#xff0c;A是一个空表&#xff0c;长度为0&#xff0c;深度为1。 &#xff08;2&#xff09;B(d,e)&#xff0c;B的元素全是原子&#xff0c;d和e&#xff0c;长度为2&#xff0c;深度为1。 &#xff08;3&#xff09;C(b,(c,…

深度解析 – 广告印象(AD impression)

广告印象(AD impression)通过表示广告在给定网络或出版商的应用程序上的浏览次数来衡量广告的影响。广告商可以区分独特印象和非独特印象&#xff0c;以评估特定个人是否看到了他们的广告&#xff0c;并了解广告的播放频率。 所有的数字营销人员都知道这一点。但是&#xff0c…

【单例测试】Mockito实战

目录 一、项目介绍二、业务代码2.1 导入依赖2.2 entity2.3 Dao2.4 业务代码 三、单元测试3.1 生成Test方法3.2 引入测试类3. 3 测试前准备3.4 测试3.4.1 name和phone参数校验3.4.2 测试数据库访问 3.4.3 数据库反例 总结 前面我们提到了《【单元测试】一文读懂java单元测试》 简…

Python小案例:数字炸弹游戏(优化版)

优化内容 上次所写的 数字炸弹案例 中所留了的bug&#xff1a;   a. 两次死循环&#xff0c;其实可以只用一次的&#xff1b;☑   b. 如果其中一个人输入的数据是无效的后游戏将会重新开始&#xff0c;规则上来讲是直接淘汰该玩家 ☑ 本次利用列表坐标 name_Nub 叠加&#…

【Linux】线程预备知识{远程拷贝/重入函数与volatile关键字/认识SIGCHILD信号/普通信号/实时信号}

文章目录 0.远程拷贝1.重入函数与volatile关键字2.认识SIGCHILD信号3.普通信号/实时信号 0.远程拷贝 打包资源&#xff1a;tar czf code.tgz *远程传输&#xff1a;scp code.tgz usr服务器ip:/home/usr/路径解压&#xff1a;tar xzf code.tgz 1.重入函数与volatile关键字 先看…

LLM - 大语言模型的分布式训练 概述

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/136924304 大语言模型的分布式训练是一个复杂的过程&#xff0c;涉及到将大规模的计算任务分散到多个计算节点上。这样做的目的是为了处…

10-shell编程-辅助功能

一、字体颜色设置 第一种: \E[1:色号m需要变色的字符串\E[0m 第二种: \033[1:色号m需要变色的字符串\033[0m ########################### \E或者\033 #开启颜色功能 [1: #效果 31m #颜色色号 \E[0m #结束符 1&#xff0c;颜色案例 2&#xff0c;效果案例 二、gui&am…