括号匹配问题

简介: 括号匹配问题

🔎前言:

在之前我们学过了栈与队列,本次我们就学习一下如何利用栈去解决一个经典基础问题,那就是括号匹配问题,希望能够帮助大家理解解决这个问题。


🔎题目描述:

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。

左括号必须以正确的顺序闭合

题目链接:括号匹配问题


🎹问题分析:

🎄1 可能存在左括号多的情况

🎄2 可能存在右括号多的情况

🎄3 存在括号不匹配的情况


🔐总结解题思路:

1 我们在遍历字符串的过程中,需要先取得栈顶的元素与右括号比较,看是否匹配,如果匹配才能出栈。

2 在出栈的过程中,如果栈为空,说明右括号多了,如果发现栈顶元素与右括号不是匹配的括号,那么就需要直接return了

3 在整个字符串遍历结束之后,我们要判断一下栈是否为空,如果为空,说明是匹配的,否则就是左括号偏多的情况。


⏳代码实现:

public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for(int i = 0;i<s.length();i++){
            char ch = s.charAt(i);
            if(ch=='('||ch=='['||ch=='{'){
                stack.push(ch);//左括号进栈
            }else{
                if(stack.empty()){//栈为空,右括号多了
                    return false;
                }else{
                    char ch1 = stack.peek();//取栈顶元素
                if(ch1=='('&& ch ==')'||ch1=='{'&&ch=='}'||ch1=='['&&ch==']'){
                    stack.pop();//匹配出栈
                }else{
                    return false;//括号不匹配
                }
                }
            }
        }
        if(!stack.empty()){
            return false;//栈不为空,左括号偏多了
        }
        return true;
    }
目录
相关文章
|
机器学习/深度学习 算法 PyTorch
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
|
安全
公网IP和私网IP
公网IP和私网IP
955 1
|
前端开发 人机交互
Cocos Creator3.8 项目实战(四)巧用九宫格图像拉伸
Cocos Creator3.8 项目实战(四)巧用九宫格图像拉伸
691 0
|
前端开发 NoSQL 关系型数据库
Kong网关介绍以及在Docker上部署容器以及Dashboard
Kong 是在客户端和(微)服务间转发API通信的API网关,通过插件扩展功能
2329 0
Kong网关介绍以及在Docker上部署容器以及Dashboard
|
网络协议 网络架构
计算机网络实验(华为eNSP模拟器)——第四章 配置静态路由、动态路由
计算机网络实验(华为eNSP模拟器)——第四章 配置静态路由、动态路由
计算机网络实验(华为eNSP模拟器)——第四章 配置静态路由、动态路由
|
缓存 JavaScript Java
常见java OOM异常分析排查思路分析
Java虚拟机(JVM)遇到内存不足时会抛出OutOfMemoryError(OOM)异常。常见OOM情况包括:1) **Java堆空间不足**:大量对象未被及时回收或内存泄漏;2) **线程栈空间不足**:递归过深或大量线程创建;3) **方法区溢出**:类信息过多,如CGLib代理类生成过多;4) **本机内存不足**:JNI调用消耗大量内存;5) **GC造成的内存不足**:频繁GC但效果不佳。解决方法包括调整JVM参数(如-Xmx、-Xss)、优化代码及使用高效垃圾回收器。
536 15
常见java OOM异常分析排查思路分析
|
Web App开发 Linux 微服务
了解应用中的微内核架构
【6月更文挑战第25天】**微内核架构**是将系统服务从内核移出,形成可选插件,增强扩展性和适应性。常见于第三方应用和嵌入式系统,如Linux、L4、WinCE。优点包括清晰结构、移植性和扩展性,但缺点是通信开销大、性能较低,不利于整体优化。适合需要灵活功能组合的场景。
408 5
了解应用中的微内核架构
|
XML Java 数据格式
【Spring】全面讲解IOC、AOP、注入方式、bean的生命周期、aop通知应用 spring与web容器整合
Spring是一个开源的轻量级Java应用开发框架,它提供了一种简单、高效、灵活的方式来构建企业级应用程序。Spring框架的核心特点是依赖注入(Dependency Injection)和面向切面编程(Aspect-Oriented Programming),它通过一组模块化的组件提供全面的支持,使开发人员能够快速搭建可扩展、可维护的应用。
|
安全 数据挖掘 网络安全
电子商务网站建设的关键技术
移动端适配是电子商务网站建设中越来越重要的关键技术。综上所述,电子商务网站建设涉及多个关键技术,包括网站设计与用户体验、安全性、性能与可扩展性、搜索引擎优化、移动端适配以及数据分析与营销。掌握这些关键技术,企业可以建设一个安全、高效、用户…
697 0
|
边缘计算 安全 开发工具
探索未来计算的可能性:Wasmer — 高性能WebAssembly运行时
探索未来计算的可能性:Wasmer — 高性能WebAssembly运行时
409 2