题目描述:

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

示例 1:

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

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

输入:s = "(]"
输出:false
示例 4:

输入:s = "([)]"
输出:false
示例 5:

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

思路分析:

实现之。

判断括号的有效性可以使用「栈」这一数据结构来解决。

我们对给定的字符串 ss 进行遍历,当我们遇到一个左括号时,我们会期望在后续的遍历中,有一个相同类型的右括号将其闭合。由于后遇到的左括号要先闭合,因此我们可以将这个左括号放入栈顶。

当我们遇到一个右括号时,我们需要将一个相同类型的左括号闭合。此时,我们可以取出栈顶的左括号并判断它们是否是相同类型的括号。如果不是相同的类型,或者栈中并没有左括号,那么字符串 ss 无效,返回 \text{False}False。为了快速判断括号的类型,我们可以使用哈希映射(HashMap)存储每一种括号。哈希映射的键为右括号,值为相同类型的左括号。

在遍历结束后,如果栈中没有左括号,说明我们将字符串 ss 中的所有左括号闭合,返回 True,否则返回 False。

注意到有效字符串的长度一定为偶数,因此如果字符串的长度为奇数,我们可以直接返回 False,省去后续的遍历判断过程。

Java实现:

class Solution {public boolean isValid(String s) {int len=s.length();if(len%2==1){return false;}Map<Character,Character> map=new HashMap<>(){{put(')','(');put(']','[');put('}','{');}};Stack<Character> stack=new Stack<>();for(int i=0;i<len;i++){char ch=s.charAt(i);if(map.containsKey(ch)){if(stack.isEmpty() || stack.peek()!=map.get(ch)){return false;}stack.pop();}else{stack.push(ch);}}return stack.isEmpty();}
}

LeetCode-20:有效的括号相关推荐

  1. LeetCode 20. 有效的括号 golang(三)

    20. 有效的括号 这个题做了三次,前两次的解法现在觉得是算不得正确的. 看的多写得少 做的多总结少 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有 ...

  2. 算法训练Day11|LeetCode 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

    题目链接:20. 有效的括号 第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false 第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字 ...

  3. LeetCode 20. 有效的括号(栈)

    文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭 ...

  4. 【Java】LeetCode 20 有效的括号 (运用数据结构:栈 解题)

    题目: 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 解题 ...

  5. LeetCode 20. 有效的括号(Valid Parentheses)

    栈思想 关于有效括号表达式的一个有趣属性是有效表达式的子表达式也应该是有效表达式. 整个表达式是有效的,而它的子表达式本身也是有效的.这为问题提供了一种递归结构.(栈思想) 从整体表达式中一次删除一个 ...

  6. leetcode 20. 有效的括号

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...

  7. LeetCode 20 有效的括号

    https://leetcode-cn.com/problems/valid-parentheses/ 解决方案 class Solution {public boolean isValid(Stri ...

  8. 【LeetCode】【HOT】20. 有效的括号(栈)

    [LeetCode][HOT]20. 有效的括号 文章目录 [LeetCode][HOT]20. 有效的括号 package hot;import java.util.Deque; import ja ...

  9. 有效的括号(leetcode 20)

    文章目录 1.问题描述 2.难度等级 3.热门指数 4.解题思路 5.实现示例 5.1 C++ 5.2 Golang 参考文献 1.问题描述 给定一个只包括 '(',')','{','}','[',' ...

  10. LeetCode19删除链表的倒数第N个节点20有效的括号

    维护不易,还请点赞支持,微信搜索bigsai 回复进群一起打卡. 19删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1-> ...

最新文章

  1. 《C#精彩实例教程》小组阅读10 -- C#属性与方法
  2. canvas 图片不能缩放显示在画布的问题 忘记设置dw,dh
  3. Python3 调用ffmpeg
  4. C++矩阵运算库推荐
  5. python习题:写一个备份数据库的脚本
  6. 设计模式-行为-模板方法
  7. 温州大学《深度学习》课程课件(十二、自然语言处理和词嵌入)
  8. PHP内核探索:新垃圾回收机制说明
  9. C#关于电脑DPI改动显示的问题
  10. [转]caffe中solver.prototxt参数说明
  11. CC2540 串口0 通道2配置
  12. python实现小型搜索引擎设计_推荐:为图像处理初学者设计的100个问题(含python实现代码)...
  13. Android设计模式--观察者模式
  14. PyCharm中的Debug使用
  15. 最全各国人口数据,人口的高出生率与高死亡率竟然是这些国家
  16. 怎么看自己的maven本地仓库在那里
  17. 【科研绘图】PS绘制封面中神奇的放大效果
  18. halcon中如何生成椭圆_《zw版·Halcon-delphi系列原创教程》 Halcon分类函数005·graphics-obj,基本绘图单元,包括线段、矩形、椭圆、圆形...
  19. 贝叶斯垃圾邮件分类问题中联合概率的推导
  20. Ubuntu18.04 GoldenDict安装及配置

热门文章

  1. CentOS 6.6 搭建Zabbix 3.0.3 过程
  2. js与flash结合使用
  3. Windows API 进程状态信息函数
  4. c语言在一组数据中找最大值最小值,用c语言输入一组数据,输出最大最小值,求c语言程序讲解: 输入一组数据,求最大值,最小值,和,平均...
  5. 32位linux进程线程在内存中的样子
  6. C语言指针作为参数的传递问题
  7. 基础编程题目集 7-4 BCD解密 (10 分)
  8. Oracle认证体系的重大变化,你需要知道这些...
  9. 20万DBA在关注的11个问题
  10. 【大讲堂讲师专访】张甦:数据库选型需因地制宜,MongoDB与MySQL绝非替代