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

news/2024/11/17 0:35:15/

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

目录

  • 一. 🦁 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.ppmy.cn/news/29571.html

相关文章

html常用标签2和语法练习

目录 1.表单标签 form标签 input标签 选择框 复选框:checkbox 按钮框:button 文件选择框 多行编辑框:textarea 2.html语法练习 展示简历信息 填写简历信息 ​编辑 3.HTML特殊字符 1.表单标签 表单是让用户输入信息的重要途径 表单域:包含表单元素的区域,重点是form…

APICloud 弹动与滚轴冲突的解决模拟

当打开页面的bounces开关来实现下拉刷新和上翻加载是&#xff0c;如果页面中有scroll-view&#xff0c;那么手指上下滑动时弹动会触发&#xff0c;而滚轴无法正常实现&#xff0c;只有按住不动再拖动滚轴才会触发。开始想通过获取手指点击屏幕的坐标点设置触发条件来解决两者的…

mybatisplus复习(黑马)

学习目标能够基于MyBatisPlus完成标准Dao开发能够掌握MyBatisPlus的条件查询能够掌握MyBatisPlus的字段映射与表名映射能够掌握id生成策略控制能够理解代码生成器的相关配置一、MyBatisPlus简介MyBatisPlus&#xff08;简称MP&#xff09;是基于MyBatis框架基础上开发的增强型工…

Spring的核心基础——IOC与DI

文章目录一、Spring简介1 Spring介绍1.1 为什么要学1.2 学什么2 初识Spring2.1 Spring家族2.2 Spring发展史3 Spring体系结构3.1 Spring Framework系统架构图4 Spring核心概念问题导入4.1 核心概念二、IOC和DI入门1 IOC入门问题导入1.1 门案例思路分析1.2 实现步骤1.3 实现代码…

第三章 opengl之纹理

OpenGL纹理纹理环绕方式纹理过滤多级渐远纹理加载和创建纹理stb_image.h生成纹理纹理的应用纹理单元纹理 用stb_image.h库&#xff0c;原先用SOIL库也可以实现。 可以为每个顶点添加颜色来增加图形的细节。但是想得到一个真实的图形&#xff0c;需要足够多的顶点&#xff0c;…

软件测试-接口测试-代码实现接口测试

文章目录 1.request1.1 request介绍1.2 发送get请求1.3 发送set请求1.4 其他请求方式1.5 传递url参数1.6 响应内容解析1.7 cookie1.8 设置session2.集成UnitTest2.1 接口测试框架开发2.2 案例:使用TPShop项目完成对登录功能的接口测试1.request 1.1 request介绍 概念 基于py…

Newman+Jenkins实现接口自动化测试

一、是什么Newman Newman就是纽曼手机这个经典牌子&#xff0c;哈哈&#xff0c;开玩笑啦。。。别当真&#xff0c;简单地说Newman就是命令行版的Postman&#xff0c;查看官网地址。 Newman可以使用Postman导出的collection文件直接在命令行运行&#xff0c;把Postman界面化运…

「ABAP」一文带你入门OPEN SQL中的SELECT查询(附超详细案例解析)

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…