【刷题记录】20. 有效的括号

简介: 【刷题记录】20. 有效的括号

一、题目描述


来源:力扣(LeetCode)


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


有效字符串需满足:


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


示例 1:


输入:s = "()"

输出:true


示例 2:


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

输出:true


示例 3:


输入:s = "(]"

输出:false


示例 4:


输入:s = "([)]"

输出:false


示例 5:


输入:s = "{[]}"

输出:true


提示:


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


二丶思路分析


使用栈来解决
在这道题目中,我们遍历时候,每个左括号,都要对应一个相应的右括号,而且后面出现的左括号要优先匹配,这个跟栈 先进后出 是十分类似的。


  • 当遇到左括号时候,入栈
  • 当遇到右括号时候,取出栈顶括号
  • 判断出去括号 是否跟右括号类型一致,不一致,直接返回false
  • 如果栈中没有左括号了,也直接返回 false
  • 当遍历完所有的字符串
  • 栈为空,说明所有的括号都闭合了
  • 栈不为空,说明还有括号没有匹配闭合
  • 当匹配的时候,字符串长度一定为偶数,否则肯定不匹配,直接返回 false
  • 为了方便匹配,我们可以用哈希表存储每一种括号。键为右括号,值为相同类型的左括号。


三、代码实现


class Solution {
    public boolean isValid(String s) {
        int length = s.length();
if (length % 2 !=0) {
            return false;
        }
        Map<Character, Character> map = new HashMap<Character, Character>() {{
            put(')', '(');
            put(']', '[');
            put('}', '{');
        }};
        Deque<Character> stack = new LinkedList<Character>();
for (int i =0; i < length; 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();
    }
}


复杂度分析


时间复杂度:

网络异常,图片无法展示
|
,其中 n 是字符串 s 的长度。


空间复杂度:复杂度为

网络异常,图片无法展示
|
,使用哈希表的空间


运行结果


网络异常,图片无法展示
|


总结


有些问题,我们可以使用有类似特性的数据结构来处理,可以帮我们更快的解决问题。

目录
相关文章
|
应用服务中间件 Go nginx
K8S Ingress Controller 健康检查原理剖析
K8S本身提供了Liveness和Readiness机制对Pod进行健康监控,同样我们在部署K8S Ingress Controller时也配置了LivenessProbe和ReadinessProbe来对其进行健康检查,本文旨在剖析Nginx Ingress Controller内部的健康检查逻辑,以便于更好地监控Nginx Ingress Controller。
9499 0
|
12月前
|
CDN
阿里云CDN收费标准,不同计费模式价格表(基础服务费和增值服务费用整理)
阿里云CDN的计费包括基础费用和增值费用。基础费用有三种计费方式:按流量、带宽峰值和月结95带宽峰值,默认按流量计费。增值服务如HTTPS、QUIC、WAF和实时日志等,使用才收费。详细价格和规则请参考阿里云官网。
1331 118
|
存储 Java API
在springboot中缩短一个url链接
URL缩短服务是现代应用中常见的需求,用于将长URL映射为简短的唯一代码,便于分享。该服务具备多种功能,如自动过期、访问统计、防止重复及安全机制。通过Spring Boot构建RESTful API,使用H2数据库存储数据,Java UUID生成短码,并通过定时任务清理过期URL。用户可通过API提交长URL获取短链接,查询访问量,系统会自动重定向并记录访问次数。每天午夜自动清理过期URL,确保数据整洁。此项目结构清晰,涵盖实体类、Repository、Service和Controller等核心组件,适合快速开发和扩展。
303 2
|
10月前
|
数据采集 缓存 监控
Zabbix性能调优三板斧
在“2024 Zabbix中国峰会”上,上海宏时数据系统有限公司的董玉凡分享了《Zabbix性能调优三板斧》。内容涵盖Zabbix性能瓶颈分析、优化核心原则及实际案例。通过配置优化、数据采集优化和架构扩展优化三大方面,结合自监控数据精准施策,显著提升大规模监控场景下的系统稳定性与效率。案例展示了6000+节点和5000+网络设备的成功优化实践。
440 0
|
缓存 算法 Java
GC垃圾收集算法
这篇文章详细讨论了垃圾收集(GC)的几种算法,包括引用计数、可达性分析、标记-清除、标记-复制和标记-整理算法,并介绍了这些算法的优缺点和适用场景。
206 0
GC垃圾收集算法
|
关系型数据库 MySQL 数据库
InnoDB 的 MVCC 实现原理
InnoDB 的 MVCC 实现原理
268 0
|
算法 数据库
MYSQL-mybatisplus的主键自增问题与@Tableld@TableField@TableLogic的学习
关于org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.laoyang.Mapper.BookMapper.deleteById问题
885 105
|
人工智能 API 语音技术
MoneyPrinterPlus:AI自动短视频生成工具-阿里云配置详解
详细介绍如何使用在MoneyPrinterPlus中配置使用阿里云语音服务,实现AI自动短视频生成。
|
定位技术
环形缓冲区RingBuff
环形缓冲区RingBuff
|
数据采集 机器人 数据处理
阿里云RPA携手百胜软件助力大型制药企业降本增效
RPA全称机器人流程自动化(Robotic Process Automation),是一种新兴的“数字劳动力”,可以替代或辅助人完成规则明确的重复性劳动,大幅提升业务流程销量,实现企业业务流程的自动化和智能化,从而降本增效。目前,RPA解决方案的应用场景几乎涵盖了所有行业,包括银行、保险、制造、零售、医疗、物流、电子商务甚至政府和公共机构。
阿里云RPA携手百胜软件助力大型制药企业降本增效