目录

题目链接:LeetCode20.有效的括号

一.题目要求

二.解题思路

三.具体代码

四.运行截图


题目链接:LeetCode20.有效的括号

一.题目要求

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

有效字符串需满足:

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

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

二.解题思路

首先,我们看到这种匹配问题,就可以联想到利用栈的结构特性——先进后出,当遇到左括号时入栈,遇到右括号时出栈比较,不就能轻松实现括号匹配了。

那具体应该如何操作呢?

第1步,我们肯定要建立一个空栈,并且把字符串转换为 "可独立操作字符的" 字符数组,然后通过遍历字符数组进行操作。

第2步,遍历字符数组时,我们就要在其中对字符是 "左括号" 还是 "右括号" 进行判断了,如果是左括号,就进行入栈操作(push(e)),如果是右括号,就进行出栈操作(pop())。

Deque<Character> stack=new LinkedList<>();    //定义栈char[] array=s.toCharArray();    //转换字符数组for(char c:array){if(c=='('||c=='['||c=='{'){//入栈stack.push(c);}else{//出栈stack.pop();}
}  

第3步,当然光这样是不够的,我们还需要进行括号的匹配操作,并不是任意的左括号都能和任意的右括号相匹配,所以我们在所有左括号入栈后,还要保存这时出栈的左括号,并和此时出现的右括号进行匹配操作。

//走到这步说明一定遇到了右括号
char left=stack.pop();    //保存出栈的左括号
if(!isMatch(left,c)){    //进行括号匹配return false;
}

将括号匹配的操作独立为一个函数:

private boolean isMatch(char left,char right){if(left=='('){return right==')'; }else if(left=='['){return right==']';}return right=='}';
}

第4步, 我们还要考虑括号 "数量不匹配" 的情况,此时就要考虑应该在什么时候进行判断,如果是左括号少于右括号,那么说明肯定在没有遍历完的时候,栈就空了(栈只存储了左括号),所以可以在出栈前先判断栈是否为空;如果是右括号少于左括号,那肯定在遍历结束的时候,栈不为空(栈中的左括号正好和后面的右括号全部匹配,已全部出栈)。

此时,我们已经完成这道题目,下面来看一下画图示例:

以示例2为例:

三.具体代码

class Solution {public boolean isValid(String s) {Deque<Character> stack=new LinkedList<>();char[] array=s.toCharArray();for(char c:array){if(c=='('||c=='['||c=='{'){stack.push(c);}else{if(stack.isEmpty()){return false;}char left=stack.pop();if(!isMatch(left,c)){return false;}}    }if(stack.isEmpty()){return true;}else{return false;}}private boolean isMatch(char left,char right){if(left=='('){return right==')'; }else if(left=='['){return right==']';}return right=='}';}
}

四.运行截图

如想了解栈(Stack)的相关知识,请查阅:

数据结构☞栈和队列​​​​​​​

如有建议或想法,欢迎一起讨论学习~

Java题目详解——LeetCode20.有效的括号相关推荐

  1. 蓝桥杯java B组历年省赛真题汇总及题目详解

    蓝桥杯java B组历年省赛真题汇总及题目详解 2019年第十届蓝桥杯省赛真题详解 2018年第九届蓝桥杯省赛真题详解 2017年第八届蓝桥杯省赛真题详解 2016年第七届蓝桥杯省赛真题详解 2015 ...

  2. Java异常详解及如何处理

    来源:Java异常详解及如何处理 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言 ...

  3. Apache Thrift - java开发详解

    2019独角兽企业重金招聘Python工程师标准>>> Apache Thrift - java开发详解 博客分类: java 架构 中间件 1.添加依赖 jar <depen ...

  4. Java泛型详解-史上讲解最详细的,没有之一

    目录 1. 概述 2. 一个栗子 3. 特性 4. 泛型的使用 4.1 泛型类 4.2 泛型接口 4.3 泛型通配符 4.4 泛型方法 4.4.1 泛型方法的基本用法 4.4.2 类中的泛型方法 4. ...

  5. Java虚拟机详解----JVM常见问题总结

    [正文] 声明:本文只是做一个总结,有关jvm的详细知识可以参考本人之前的系列文章,尤其是那篇:Java虚拟机详解04----GC算法和种类.那篇文章和本文是面试时的重点. 面试必问关键词:JVM垃圾 ...

  6. java 泛型详解、Java中的泛型方法、 java泛型详解

    本文参考java 泛型详解.Java中的泛型方法. java泛型详解 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即& ...

  7. 最详细的java泛型详解

    来源:最详细的java泛型详解 对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下. 本文参考java 泛型详解.Java中的泛型方法. ja ...

  8. Java基础——Java NIO详解(一)

    一.基本概念 1.I/0简介 I/O即输入输出,是计算机与外界世界的一个借口.IO操作的实际主题是操作系统.在java编程中,一般使用流的方式来处理IO,所有的IO都被视作是单个字节的移动,通过str ...

  9. Java基础——Java NIO详解(二)

    一.简介 在我的上一篇文章Java NIO详解(一)中介绍了关于标准输入输出NIO相关知识, 本篇将重点介绍基于网络编程NIO(异步IO). 二.异步IO 异步 I/O 是一种没有阻塞地读写数据的方法 ...

最新文章

  1. 2020-11-6(JDBC)
  2. 热成像成像不清楚是什么时候_「从零搞机」热成像仪查看 分形工艺Node 202 机箱 风道散热情况...
  3. 走近分形与混沌(part12)--随机过程与混沌
  4. 商家笑了 设计师哭了,京东+英特尔的AI这招太绝
  5. 常见设计模式结构图助记之结构型
  6. Git:切换分支时,无法切换到分支
  7. html字体有哪些mac,Mac字体推荐
  8. 【HikariCP】HikariCP连接时间设置和连接数设置
  9. 分享一个通过项目管理师证书成功办理北京户口的励志经验
  10. 111.绘制正态分布曲线
  11. mac中有关delete删除键的5种用法
  12. 利用HTML自制鬼灭之刃动态壁纸
  13. 114DNS Public DNS+ 阿里DNS 百度DNS 360 DNS派 Google DNS公共DNS评测体验报告
  14. C/C++动态开辟数组【C++:new/delete(推荐):int *arr = new int[m];】【C++:vector】【C:malloc() free()】
  15. 如何给厂区做导航地图?智能工厂导航地图解决方案公司
  16. DStream转换操作
  17. 假设一个公司的医疗保健数据库有如下 3 个关系: 职工(职工号,姓名,性别,职务,家庭地址,部门编号) 部门(部门编号,部门名称,办公地址,电话) 保健(保健卡编号,职工号,检查身体日期,健
  18. 在阿里外包是一种什么样的体验?
  19. ENVI|一天一个小技能|APP STORE浏览并下载矢量数据
  20. 进阶爬虫:今日头条街拍美图

热门文章

  1. linux 上端口占用的程序
  2. MATLAB虫害检测农业应用设计
  3. Qt资源文件.qrc
  4. 投简历的邮件正文要写一些什么内容比较恰当
  5. 创基MIFI多功能分线器实现随时随地上网需求
  6. IntelliJ IDEA的常用设置和快捷键
  7. 矩阵相关操作和矩阵快速幂
  8. 利用智能算法优化参数的自适应变分模态分解,VMD实现混合储能系统的分频
  9. JS获取本机IP的工具类
  10. 证券交易的基本流程是怎样的?