代码随想录day11

20. 有效的括号

 

思路:这里用模拟栈的方法会更好理解,也就是我们每次遇到朝左方向的三种类型的时候,就加入相反方向的右括号到result栈中。由于栈是一个先进后出的方式,所以我们会有一个判断stack当前为不为空,和stack[-1]是不是和当前循环到的括号相同。如果说相同,那就说明我们之前已经加入过对应的左括号,就可以直接pop,如果不同,就说明这个字符并不是按照顺序来排列的,比如说[(])。 当我们循环到“]"的时候,会发向stack[-1]是')'的,但是我们之前也确实加入过‘]"这个括号,但是他们两个这里并不相等,说明他们并不是按照对应的括号类型来排列的,所以也就不是有效的括号,就可以直接return False了。

代码:

        

def isValid(self, s: str) -> bool:stack = []for i in s:if i=='{':stack.append("}")elif i=='(':stack.append(')')elif i=='[':stack.append(']')elif not stack or stack[-1]!=i:return False else:stack.pop()return len(stack)==0

1047. 删除字符串中的所有相邻重复项

比较简单的一道题目

思路:还是用栈的方法来记录,因为这里栈可以帮助我们记录上一次的元素是什么

如果说当前元素不在栈中,那么我们就入栈,如果在栈中,我们需要同时判断当前元素是不是栈的最后一个元素,也就是我们上次加入的元素。如果是,那么就构成了相邻的重复项,这里进行栈的pop操作。那么如果不等于,就说明当前元素和上一个不是相邻重复项,正常添加即可

代码:

def removeDuplicates(self, s: str) -> str:stack = []for x in s:if x in stack and x==stack[-1]:stack.pop()else:stack.append(x)return ''.join(stack)

150. 逆波兰表达式求值 


这里刚开始看可能会比较懵逼,看下图的这个例子了解什么是逆波兰式子

 

 

 逆波兰式就是把算法运算符放到后面操作,计算机认为这个很简单识别。

思路:

        当我们判断当前元素如果是算法运算符号,我们就用一个result去记录栈中上两个数字的对应的算法操作符,比如当前是+,那么我们的result = stack[-1] + stack[-2].这里+和*都是按照这个顺序,但是当我们碰到-和/的时候,这里是用stack[-2]  - stack[-1] 或者是stack[-2]/stack[-1].

        然后将栈中的前两个元素弹出,因为我们已经记录过他们之间的操作了,所以不需要他们了,然后将result加入栈中,知道遇见下一个操作符然后重复上面的步骤。

代码:

        

stack = []for x in tokens:if x=="+":result = stack[-1] + stack[-2]elif x=='-':result = stack[-2]-stack[-1]elif x=='/':result = stack[-2]/stack[-1]elif x=='*':result = stack[-1]*stack[-2]else:stack.append(int(x))continue stack.pop()stack.pop()stack.append(int(result))return stack[-1]   

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

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

相关文章

大型语言模型与知识图谱协同研究综述:两大技术优势互补

机器之心报道 编辑:杜伟 多图综述理清当前研究现状,这篇 29 页的论文值得一读。 大型语言模型(LLM)已经很强了,但还可以更强。通过结合知识图谱,LLM 有望解决缺乏事实知识、幻觉和可解释性等诸多问题&am…

JVM源码剖析之SymbolTable和StringTable

很多读者在观看JVM相关的书籍时会看到SymbolTable和StringTable,书中的三言二语介绍的不是很清楚,并且读者的水平有限,导致无法理解SymbolTable和StringTable。所以特意写此篇图文并茂的文章来彻底理解SymbolTable和StringTable这两张表。 版…

mac电脑上,webm格式怎么转换成mp4?

mac电脑上,webm格式怎么转换成mp4?webm格式的视频也是最近几年也越来越多的,小编最近就不止一次的下载到过webm格式的视频,很多小伙伴肯定对它还并不是很了解,webm是由谷歌公司所提出以及开发出来的视频文件格式&#…

debian to go

可以使用虚拟机操作,在运行镜像到安装步骤时选择 u盘 不需要手动分 /boot 分区之类的,“Automaction”自动分区就行,全安装到根目录。boot load 安装到 /dev/sdb,也就是硬盘本身 推荐使用gpt分区表,建议拿不用的盘练…

MySQL表单查询

根据题目完成下列要求 CREATE TABLE emp ( empno int(4) NOT NULL, ename varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, job varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, mgr int(4) NULL DEFAULT …

UML类图的6种关系

目录 一、UML类图的6种关系(依赖关系由弱到强): 二、6种关系归纳总结 2.1 第一种归纳方式:先分组,再分组(由大到小,由宏观到微观) 2.2 第二种归纳方式:先聚合&#x…

计算机毕业论文内容参考|基于微信小程序和云开发的小区垃圾分类知识手册平台的设计与实现

文章目录 导文摘要前言绪论1课题背景2国内外现状与趋势相关技术与方法介绍系统分析总结与展望1本文总结2后续工作展望导文 计算机毕业论文内容参考|基于微信小程序和云开发的小区垃圾分类知识手册平台的设计与实现 摘要 本文介绍了基于微信小程序和云开发的小区垃圾分类知识手…

网络编程1—— IP地址 + 端口号 +TCP/IP协议 + 协议分层的封装与应用

文章目录 前言一、网络发展各阶段二、网络通信的三大要素1.IP地址2.端口号3.网络协议 三、TCP/IP五层网络模型各层级的用处网络设备所在分层 四、封装和分用封装分用网络传输的实际情况 总结 前言 本人是一个刚刚上路的IT新兵,菜鸟!分享一点自己的见解,如果有错误的地方欢迎各…

Flutter流式组件Wrap

Wrap组件类似Row组件都是横向依次排列,唯一的区别就是Wrap能自动换行。 主要代码: Wrap(spacing: 10, //左右间距runSpacing: 10, //上下间距// direction: Axis.vertical,//主轴的方向,默认横向// alignment: WrapAlignment.spaceBetween, …

React hooks之useCallback的使用与性能分析

使用useCallback优化代码 useCallback是对传过来的回调函数优化,返回的是一个函数;useMemo返回值可以是任何,函数,对象等都可以。 简单来说就是返回一个函数,只有在依赖项发生变化的时候才会更新(返回一个…

《项目实战》构建SpringCloud alibaba项目(二、构建微服务鉴权子工程store-authority-service)

系列文章目录 构建SpringCloud alibaba项目(一、构建父工程、公共库、网关) 构建SpringCloud alibaba项目(二、构建微服务鉴权子工程store-authority-service) 文章目录 系列文章目录前言1、在公共库增加 UserInfo类2、微服务鉴权…

电脑文件怎么加密?哪个文件加密软件好用?

不少人的电脑中都存放着一些重要文件,这些文件需要使用专业的方式进行加密保护。那么电脑文件该怎么加密呢?下面我们就通过本文来一起了解一下吧。 超级加密3000 作为一款备受好评的文件加密软件,超级加密3000在安全性、便捷性、全面性等方面…