算法竞赛(Python)-堆栈

文章目录

  • 一 基础知识
  • 二 题目
    • 有效的括号
    • 字符串解码


一 基础知识

  堆栈(Stack):简称为栈。一种线性表数据结构,是一种只允许在表的一端进行插入和删除操作的线性表。
  我们把栈中允许插入和删除的一端称为 「栈顶(top)」;另一端则称为 「栈底(bottom)」。当表中没有任何数据元素时,称之为 「空栈」。
  堆栈有两种基本操作:「插入操作」 和 「删除操作」。
  栈的插入操作又称为「入栈」或者「进栈」。
  栈的删除操作又称为「出栈」或者「退栈」。

   简单来说,栈是一种「后进先出(Last In First Out)」的线性表,简称为「LIFO 结构」。
  我们可以从两个方面来解释一下栈的定义:
  第一个方面是「线性表」。
  栈首先是一个线性表,栈中元素具有前驱后继的线性关系。栈中元素按照a1,a2,…,an的次序依次进栈。栈顶元素为an。
  第二个方面是「后进先出原则」。
  根据堆栈的定义,每次删除的总是堆栈中当前的栈顶元素,即最后进入堆栈的元素。而在进栈时,最先进入堆栈的元素一定在栈底,最后进入堆栈的元素一定在栈顶。也就是说,元素进入堆栈或者退出退栈是按照「后进先出(Last In First Out)」的原则进行的。

二 题目

有效的括号

描述:给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 ss。
要求:判断字符串 ss 是否有效(即括号是否匹配)。
说明:
有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。
示例:
输入:s = “()”
输出:True
输入:s = “()[]{}”
输出:True

思路 1:栈
括号匹配是「栈」的经典应用。我们可以用栈来解决这道题。具体做法如下:
1、先判断一下字符串的长度是否为偶数。因为括号是成对出现的,所以字符串的长度应为偶数,可以直接判断长度为奇数的字符串不匹配。如果字符串长度为奇数,则说明字符串s中的括号不匹配,直接返回False。
2、使用栈stack来保存未匹配的左括号。然后依次遍历字符串s中的每一个字符。
如果遍历到左括号时,将其入栈。
如果遍历到右括号时,先看栈顶元素是否是与当前右括号相同类型的左括号。
如果是与当前右括号相同类型的左括号,则令其出栈,继续向前遍历。
如果不是与当前右括号相同类型的左括号,则说明字符串s中的括号不匹配,直接返回False。
3、遍历完,还要再判断一下栈是否为空。
如果栈为空,则说明字符串s中的括号匹配,返回True。
如果栈不为空,则说明字符串s中的括号不匹配,返回False。

class Solution:def isValid(self, s: str) -> bool:if len(s) % 2 == 1:return Falsestack = list()for ch in s:if ch == '(' or ch == '[' or ch == '{':stack.append(ch)elif ch == ')':if len(stack) !=0 and stack[-1] == '(':stack.pop()else:return Falseelif ch == ']':if len(stack) !=0 and stack[-1] == '[':stack.pop()else:return Falseelif ch == '}':if len(stack) !=0 and stack[-1] == '{':stack.pop()else:return Falseif len(stack) == 0:return Trueelse:return False

字符串解码

描述:给定一个经过编码的字符串 s。
要求:返回 s 经过解码之后的字符串。
说明:
编码规则:k[encoded_string]。encoded_string 为字符串,k 为整数。表示字符串 encoded_string 重复 k 次。
1≤s.length≤301≤s.length≤30。
s 由小写英文字母、数字和方括号 [] 组成。
s 保证是一个有效的输入。
s 中所有整数的取值范围为 [1,300][1,300]。

示例
输入:s = “3[a]2[bc]”
输出:“aaabcbc”

输入:s = “3[a2[c]]”
输出:“accaccacc”

思路 1:栈
1.使用两个栈stack1、stack2。stack1用来保存左括号前已经解码的字符串,stack2用来存储左括号前的数字。
2.用res存储待解码的字符串、num存储当前数字。
3.遍历字符串。
  1.如果遇到数字,则累加数字到num。
   2.如果遇到左括号,将当前待解码字符串入栈 stack1,当前数字入栈 stack2,然后将 res、nums 清空。
  3.如果遇到右括号,则从stack1的取出待解码字符串res,从stack2中取出当前数字num,将其解码拼合成字符串赋值给 res。
  4.如果遇到其他情况(遇到字母),则将当前字母加入res中。
4、遍历完输出解码之后的字符串res。

class Solution:def decodeString(self, s: str) -> str:stack1 = []stack2 = []num = 0res = ""for ch in s:if ch.isdigit():num = num * 10 + int(ch)elif ch == '[':stack1.append(res)stack2.append(num)res = ""num = 0elif ch == ']':cur_res = stack1.pop()cur_num = stack2.pop()res = cur_res + res * cur_numelse:res += chreturn res

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/68944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 中的测试jar包knife4j(实现效果非常简单)

1、效果图 非常快的可以看见你实现的接口 路径http://localhost:8080/doc.html#/home 端口必须是自己的 2、实现效果 2.1、导入jar包 <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-openapi3-jakarta-spring-boot-star…

16.1.STM32F407ZGT6-CAN基础概念

参考&#xff1a; https://blog.csdn.net/sunlight_vip/article/details/128639144 前言&#xff1a; 学习总结CAN的知识点&#xff1a; 1.can是什么&#xff0c;历史由来和背景 2.can的物理层&#xff0c;链路层 3.初始化的流程和关键点 4.波特率怎么设置 5.can id怎么过滤 6…

Linux环境下的Java项目部署技巧:Nginx 详解

Nginx 的启动 Nginx 启动会生成 2 个进程&#xff1a;主进程与守护进程 主进程&#xff1a;常用于提供反向代理服务。特点&#xff1a;占内存大守护进程&#xff1a;防止主进程以外关闭。特点&#xff1a;占内存小 Nginx 启动需要占用 80 端口: 当 Ngnix 启动失败时&#xff0…

【Pytorch和Keras】使用transformer库进行图像分类

目录 一、环境准备二、基于Pytorch的预训练模型1、准备数据集2、加载预训练模型3、 使用pytorch进行模型构建 三、基于keras的预训练模型四、模型测试五、参考 现在大多数的模型都会上传到huggface平台进行统一的管理&#xff0c;transformer库能关联到huggface中对应的模型&am…

relational DB与NoSQL DB有什么区别?该如何选型?

Relational Database(关系型数据库,简称RDB)与NoSQL Database(非关系型数据库)是两类常见的数据库类型。它们在设计理念、数据存储方式、性能优化、扩展性等方面有许多差异。下面我们将会详细分析它们的区别,以及如何根据应用场景进行选型。 一、数据模型的区别 关系型…

Flutter常用Widget小部件

小部件Widget是一个类&#xff0c;按照继承方式&#xff0c;分为无状态的StatelessWidget和有状态的StatefulWidget。 这里先创建一个简单的无状态的Text小部件。 Text文本Widget 文件&#xff1a;lib/app/app.dart。 import package:flutter/material.dart;class App exte…

智能小区物业管理系统推动数字化转型与提升用户居住体验

内容概要 在当今快速发展的社会中&#xff0c;智能小区物业管理系统的出现正在改变传统的物业管理方式。这种系统不仅仅是一种工具&#xff0c;更是一种推动数字化转型的重要力量。它通过高效的技术手段&#xff0c;将物业管理与用户居住体验紧密结合&#xff0c;无疑为社区带…

给AI加知识库

1、加载 Document Loader文档加载器 在 langchain_community. document_loaders 里有很多种文档加载器 from langchain_community. document_loaders import *** 1、纯文本加载器&#xff1a;TextLoader&#xff0c;纯文本&#xff08;不包含任何粗体、下划线、字号格式&am…

游戏引擎 Unity - Unity 设置为简体中文、Unity 创建项目

Unity Unity 首次发布于 2005 年&#xff0c;属于 Unity Technologies Unity 使用的开发技术有&#xff1a;C# Unity 的适用平台&#xff1a;PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域&#xff1a;开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…

小红的小球染色期望

B-小红的小球染色_牛客周赛 Round 79 题目描述 本题与《F.R小红的小球染色期望》共享题目背景&#xff0c;但是所求内容与范围均不同&#xff0c;我们建议您重新阅读题面。 有 n 个白色小球排成一排。小红每次将随机选择两个相邻的白色小球&#xff0c;将它们染成红色。小红…

ASP.NET Core与配置系统的集成

目录 配置系统 默认添加的配置提供者 加载命令行中的配置。 运行环境 读取方法 User Secrets 注意事项 Zack.AnyDBConfigProvider 案例 配置系统 默认添加的配置提供者 加载现有的IConfiguration。加载项目根目录下的appsettings.json。加载项目根目录下的appsettin…

Redis集群理解以及Tendis的优化

主从模式 主从同步 同步过程&#xff1a; 全量同步&#xff08;第一次连接&#xff09;&#xff1a;RDB文件加缓冲区&#xff0c;主节点fork子进程&#xff0c;保存RDB&#xff0c;发送RDB到从节点磁盘&#xff0c;从节点清空数据&#xff0c;从节点加载RDB到内存增量同步&am…

沙皮狗为什么禁养?

各位铲屎官们&#xff0c;今天咱们来聊聊一个比较敏感的话题&#xff1a;沙皮狗为什么会被禁养&#xff1f;很多人对沙皮狗情有独钟&#xff0c;但有些地方却明确禁止饲养这种犬种&#xff0c;这背后到底是什么原因呢&#xff1f;别急&#xff0c;今天就来给大家好好揭秘&#…

物联网 STM32【源代码形式-ESP8266透传】连接OneNet IOT从云产品开发到底层MQTT实现,APP控制 【保姆级零基础搭建】

一、MQTT介绍 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;是一种基于发布/订阅模式的轻量级通讯协议&#xff0c;构建于TCP/IP协议之上。它最初由IBM在1999年发布&#xff0c;主要用于在硬件性能受限和网络状况不佳的情…

w186格障碍诊断系统spring boot设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

题解 洛谷 Luogu P1955 [NOI2015] 程序自动分析 并查集 离散化 哈希表 C++

题目 传送门 P1955 [NOI2015] 程序自动分析 - 洛谷 | 计算机科学教育新生态https://www.luogu.com.cn/problem/P1955 思路 主要用到的知识是并查集 (如何实现并查集&#xff0c;这里不赘述了) 若 xi xj&#xff0c;则合并它们所在的集合。若 xi ! xj&#xff0c;则 i 和 …

无用知识之:std::initializer_list的秘密

先说结论&#xff0c;用std::initializer_list初始化vector&#xff0c;内部逻辑是先生成了一个临时数组&#xff0c;进行了拷贝构造&#xff0c;然后用这个数组的起终指针初始化initializer_list。然后再用initializer_list对vector进行初始化&#xff0c;这个动作又触发了拷贝…

97,【5】buuctf web [极客大挑战 2020]Greatphp

进入靶场 审代码 <?php // 关闭所有 PHP 错误报告&#xff0c;防止错误信息泄露可能的安全隐患 error_reporting(0);// 定义一个名为 SYCLOVER 的类 class SYCLOVER {// 定义类的公共属性 $sycpublic $syc;// 定义类的公共属性 $loverpublic $lover;// 定义魔术方法 __wa…

蓝桥杯单片机第七届省赛

前言 这套题不难&#xff0c;相对于第六套题这一套比较简单了&#xff0c;但是还是有些小细节要抓 题目 OK&#xff0c;以上就是全部的题目了&#xff0c;这套题目相对来说逻辑比较简单&#xff0c;四个按键&#xff0c;S4控制pwm占空比&#xff0c;S5控制计时时间&#xff0…

【C语言】自定义类型讲解

文章目录 一、前言二、结构体2.1 概念2.2 定义2.2.1 通常情况下的定义2.2.2 匿名结构体 2.3 结构体的自引用和嵌套2.4 结构体变量的定义与初始化2.5 结构体的内存对齐2.6 结构体传参2.7 结构体实现位段 三、枚举3.1 概念3.2 定义3.3 枚举的优点3.3.1 提高代码的可读性3.3.2 防止…