当前位置: 首页 > news >正文

20. 有效的括号

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

有效字符串需满足:

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

示例:
输入:s = “()”

输出:true

解题思路:
这道题我们只需要遍历字符串,遇到一个左括号就将它保存起来,遇到一个有括号就把最新保存的左括号拿出来比较是不是它对应的左括号,也就是说最新保存的左括号先拿出来比较,那么我们自然就想到用栈这个数据结构来保存左括号。如果比较发现不是有括号对应的左括号,那么直接返回false。如果遍历结束,栈中也没有元素,则说明字符串是有效的,返回true。
然后可以用一个Map来保存右括号和左括号的映射关系,方便与栈顶的左括号进行比较。

注意的是,如果在比较过程中,遇到一个右括号但是栈为空时,也可以直接返回false。还有一个小优化是我们可以提前判断s的长度,如果为奇数则可以直接返回false。

class Solution {public boolean isValid(String s) {if(s.length() % 2 != 0){return false;}Map<Character, Character> map = new HashMap<>();map.put(')', '(');map.put(']', '[');map.put('}', '{');Deque<Character> stack = new ArrayDeque<>();for(char c : s.toCharArray()){if(c == '(' || c == '[' || c == '{'){stack.push(c);}else{if(stack.isEmpty() || stack.pop() != map.get(c)){return false;}}}return stack.isEmpty();}
}
http://www.dtcms.com/a/267320.html

相关文章:

  • BUUCTF在线评测-练习场-WebCTF习题[网鼎杯 2020 青龙组]AreUSerialz1-flag获取、解析
  • 【Flask】flask中get方法和post方法区别
  • CMake基础:条件判断详解
  • openai和chatgpt什么关系
  • 单用户模式、紧急模式、救援模式有什么区别
  • 动手学深度学习-学习笔记【二】(基础知识)
  • 若 VSCode 添加到文件夹内右键菜单中显示(通过reg文件方式)
  • 在 Windows 上安装和运行 Apache Kafka
  • Android Input 系列专题【事件的读取与分发】
  • 在SSM+vue项目中上传表单数据和文件
  • android开发中的 AndroidX 版本的查看 及 constraintLayout的简单用法
  • 【性能优化】程序性能优化:疏通胜于堵塞
  • 【Elasticsearch】检索高亮
  • 成为git砖家(12): 看懂git合并分支时冲突提示符
  • HTML初学者第三天
  • hono框架绑定cloudflare的d1数据库操作步骤
  • Redis基础的介绍与使用(一)(Redis简介以及Redis下载和安装)
  • Git 版本控制完全指南:从入门到精通
  • 【Halcon】WPF 自定义Halcon显示控件完整流程与 `OnApplyTemplate` 未触发的根本原因解析!
  • Web3 Study Log 003
  • 蓝牙墨水屏上位机学习(3)
  • Java 与 Vue 全栈开发:“一课一得“ 学习笔记系统实战
  • OneCode图表配置速查手册
  • CMake是什么
  • NV183NV185美光固态闪存NV196NV201
  • 供应链管理-采购管理:国际贸易及支付领域中常见的支持方式
  • FLUX.1-Kontext 高效训练 LoRA:释放大语言模型定制化潜能的完整指南
  • 软件版本FCCU(故障采集与控制单元)设计
  • 如何选择不会降低网站速度的WordPress主题
  • 动手实践OpenHands系列学习笔记11:现代开发流程