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

【力扣】stack容器的探索之有效的括号

作者:狮子也疯狂
专栏:《算法详解》
愿你生如夏花之绚烂,幸运永远与你相伴,疯狂常在。
在这里插入图片描述

目录

  • 一. 🦁 Stack容器的来历
    • 1.1 操作栈的方法
  • 二. 🦁 Stack的使用
    • 2.1 题目
    • 2.2 分析
    • 2.3 详细算法实现
    • 2.4 力扣AC截图
  • 三. 🦁 总结

一. 🦁 Stack容器的来历

Stack 栈容器Vector 的一个子类,它实现了一个标准的后进先出(LIFO:Last In Frist Out)的栈。它通过 5 个操作方法对 Vector 进行扩展,允许将向量视为堆栈。

1.1 操作栈的方法

Modifier and TypeMethod and Description
booleanenpty() :判断该栈是否为空
Epeek(): 查看栈顶元素
Epop(): 删除栈顶元素,并返回该值
Epush(E item):将元素推入栈顶
intsearch(object o) : 返回该元素的位置

二. 🦁 Stack的使用

这里以力扣第20题为实战案例:查看

2.1 题目

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号

2.2 分析

这一道题明显是可以使用栈的结构来做,实例化一个栈(Stack< String >),对字符串做一次循环遍历,在遍历过程中,遇到左括号(无论是什么左括号({ ( [),都将其对应的右括号放进stack容器中;如果遇到右括号c,则会从stack顶中弹出一个栈顶元素x,将x与c比较,使用flag这一布尔值(默认为true,即匹配)来判断是否匹配,如果不匹配则修改flag为false。到最后遍历结束,如果stack ——>!empty(),则也修改flag为false,最后返回flag。
注意到有效字符串的长度一定为偶数,因此如果字符串的长度为奇数,我们可以直接返回 False,省去后续的遍历判断过程。

2.3 详细算法实现

class Solution {public boolean isValid(String s) {Stack<String> stack = new Stack<>();boolean flag = true;for(int i = 0;i<s.length();i++){char str = s.charAt(i);if(str == '('){stack.push(")");}if(str == '['){stack.push("]");}if(str == '{'){stack.push("}");}if(str == ')'||str == ']'||str == '}'){if(stack.empty()){return false;}String c = stack.pop();if(c.charAt(0) != str){flag = false;break;}}}if(!stack.empty()){flag = false;}return flag;}
}

2.4 力扣AC截图

在这里插入图片描述

三. 🦁 总结

Leetcode的一道难度为简单的算法题,可以帮助大家很好的理解Stack这个数据结构,希望大家喜欢。更多专栏请点击

专栏名字
🔥Elasticsearch专栏es
🔥spring专栏spring开发
redis专栏redis学习笔记
🔥项目专栏项目集锦
修bug专栏bug修理厂
http://www.lryc.cn/news/27412.html

相关文章:

  • 【Elsevier出版社】中科院2区,SCIEEI 双检,已有发表案例,3个月左右录用
  • 基于明道云平台重建医院管理流程
  • 【蓝桥杯嵌入式】STM32定时器的配置,解析预分频系数和重装载值与时钟频率的关系
  • ChatGPT API 低价上线,开发者可以人手一个了?
  • 品牌营销策略 | 科学经营合作伙伴关系的5个要素
  • 【剑指offer-C++】JZ20:表示数值的字符串
  • 【NLP相关】深度学习领域不同编程IDE对比
  • 定制ubuntu的docker镜像
  • 我的 System Verilog 学习记录(8)
  • 详解JAVA字节码
  • 前端利用emailjs发送邮件
  • 16 Nacos服务端服务注册源码分析
  • Spring Boot2中如何优雅地个性化定制Jackson
  • 2023年全国最新食品安全管理员精选真题及答案11
  • 【脚本】用于得到某个文件/文件夹所有文件的存储大小(MB单位)
  • 19- CNN进行Fashion-MNIST分类 (tensorflow系列) (项目十九)
  • 【正点原子FPGA连载】第二十二章IP封装与接口定义实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
  • 【ElasticSearch8.X】学习笔记(二)
  • Ubuntu22.04安装、配置、美化、软件安装、配置开发环境
  • 企业电子招投标采购系统之系统的首页设计
  • Python爬虫-阿里翻译_csrf
  • C语言实现三子棋【详解+全部源码】
  • 双指针法将时间复杂度从 O(n^2) 优化到 O(n)
  • 【SpringBoot系列】 Spring中自定义Session管理,Spring Session源码解析
  • 【上位机入门常见问题】SQLServer2019 安装指导
  • RabbitMQ第一讲
  • 华为机试题:HJ100 等差数列(python)
  • 数据推荐 | 人体行为识别数据集
  • 667真题分析 | 2023年667真题简要分析和答题思路参考
  • 配置 Docker 使用 GPU