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

Leetcode20 (有效的括号)

题目描述

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

有效字符串需满足:

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

示例 1:

输入:s = “()”

输出:true

示例 2:

输入:s = “()[]{}”

输出:true

示例 3:

输入:s = “(]”

输出:false

示例 4:

输入:s = “([])”

输出:true

提示:

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

题解1

相当经典的一道题
就是用栈

遍历s,当前为左括号时,直接入栈
当前为右括号判断栈顶元素是否为对应左括号

小点:
1、可以直接判断s长度,如果为奇数直接返回false
2、需要判断时,栈顶元素为空,直接返回false

代码:

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

题解2

看了一眼最优解
发现可以用数组模拟栈
并且用s.toCharArray()作为这个栈
可以实现栈的同时在这个数组上读取数据
性能极好

class Solution {public boolean isValid(String s) {int len=s.length();if(len%2==1) return false;char[] stack = s.toCharArray();int i=0,j=0;while(i<len){if(stack[i]==')'&&j>0&&stack[j-1]=='(') j--;else if(stack[i]==']'&&j>0&&stack[j-1]=='[') j--;else if(stack[i]=='}'&&j>0&&stack[j-1]=='{') j--;else stack[j++]=stack[i];i++;}return j==0;}
}
http://www.xdnf.cn/news/13349.html

相关文章:

  • Windows笔记之Win11让非焦点窗口程序也能获得流畅性能的方法
  • [论文阅读] 算法 | 布谷鸟算法在声源定位中的应用研究
  • 三星手机Galaxy S24 Ultra使用adb工具关闭和开启系统更新
  • 达梦数据库 单机部署dmhs同步复制(DM8—>DM8)
  • 基于matlab/Simulink的三相四线逆变器并联系统仿真
  • SAP学习笔记 - 开发32 - 前端Fiori开发 Content Density(内容密度)
  • 代码随想录算法训练营day1
  • 【Django】性能优化-普通版
  • Oracle线上故障问题解决
  • 达梦数据库部署veri数据对比工具
  • ArcGIS中坐标系一致但图层无法重叠问题解决
  • MATLAB实现数字下变频低通滤波法
  • Java/Kotlin selenium 无头浏览器 [Headless Chrome] 实现长截图
  • OpenAI o3-Pro发布:o3 模型宣布降价80%API Key价格“跳水”,高级AI模型普及加速!
  • AI助手一键生成专业PPT(Gamma/Genspark/Kimi)
  • iOS 26 beta1 重新禁止 JIT 执行,Flutter 下的 iOS 真机 hot load 暂时无法使用
  • 8.3.1_冒泡排序
  • 支持向量机:在混沌中划出最强边界
  • OPenCV CUDA模块立体匹配------对立体匹配生成的视差图进行双边滤波处理类cv::cuda::DisparityBilateralFilter
  • vllm docker-compose 运行LLM-Research/Mistral-7B-Instruct-v0.3
  • Linux 杀进程指令详解:`kill -9 PID` 和 `kill -15 PID` 有什么区别?
  • 服务器上传或者下载在中间断网后继续上传方法
  • 【软考中级】软件设计师考试大纲
  • 新闻类鸿蒙应用功耗危机以及优化方案
  • Java反射完全指南
  • 高频面试之5Kafka
  • Mac 上使用 mysql -u root -p 命令,出现“zsh: command not found: mysql“?如何解决
  • 机器人教学和实践的可编程智能仿生机器人平台——智能六足机器人
  • 【Java开发】Spring 事务开发完全指南:从入门到精通
  • MySQL中触发器详解 触发器在自动化任务中的应用场景