首页 > 其他分享 >Day 11 | 20. 有效的括号 、1047. 删除字符串中的所有相邻重复项 、150. 逆波兰表达式求值

Day 11 | 20. 有效的括号 、1047. 删除字符串中的所有相邻重复项 、150. 逆波兰表达式求值

时间:2024-06-01 15:22:39浏览次数:9  
标签:11 150 elif return res pop 求值 stack append

20. 有效的括号

讲完了栈实现队列,队列实现栈,接下来就是栈的经典应用了。

大家先自己思考一下 有哪些不匹配的场景,在看视频 我讲的都有哪些场景,落实到代码其实就容易很多了。

题目链接/文章讲解/视频讲解:https://programmercarl.com/0020.有效的括号.html

思考

class Solution:
    def isValid(self, s: str) -> bool:
        stack = [] 
        for c in s:
            if c in '([{':
                stack.append(c)
            else:
                if c == ')' and len(stack)>0 and stack[-1] == '(':
                    stack.pop()
                elif c == ']' and len(stack)>0 and stack[-1] == '[':
                    stack.pop()
                elif c == '}' and len(stack)>0 and stack[-1] == '{':
                    stack.pop()
                else:
                    return False
        if len(stack) == 0:
            return True
        else:
            return False

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

栈的经典应用。

要知道栈为什么适合做这种类似于爱消除的操作,因为栈帮助我们记录了 遍历数组当前元素时候,前一个元素是什么。

题目链接/文章讲解/视频讲解:https://programmercarl.com/1047.删除字符串中的所有相邻重复项.html

思考

天天爱消除模式,使用栈来处理匹配问题。

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

150. 逆波兰表达式求值

本题不难,但第一次做的话,会很难想到,所以先看视频,了解思路再去做题

题目链接/文章讲解/视频讲解:https://programmercarl.com/0150.逆波兰表达式求值.html

思考

逆波兰表达式主要有以下两个优点:

去掉括号后表达式无歧义,上式即便写成 1 2 + 3 4 + * 也可以依据次序计算出正确结果。

适合用栈操作运算:遇到数字则入栈;遇到运算符则取出栈顶两个数字进行计算,并将结果压入栈中。

class Solution:
    def evalRPN(self, tokens: List[str]) -> int:
        stack = []
        for c in tokens:
            if c == '+':
                res = stack.pop() + stack.pop()
                stack.append(res)
            elif c == '-':
                y = stack.pop()
                x = stack.pop()
                res = x - y
                stack.append(res)
            elif c == '*':
                res = stack.pop() * stack.pop()
                stack.append(res)
            elif c == '/':
                y = stack.pop()
                x = stack.pop()
                res = int(x / y)
                stack.append(res)
            else:
                stack.append(int(c))
        return stack[-1]

标签:11,150,elif,return,res,pop,求值,stack,append
From: https://www.cnblogs.com/forrestr/p/18226001

相关文章

  • 谷歌浏览器114之前、124、125、126版本驱动下载
    114之前版本下载链接在这里   https://chromedriver.chromium.org/downloads ​​​​​​124以后版本下载链接在此   https://googlechromelabs.github.io/chrome-for-testing/#canary只有后面status是绿色对勾的才可以下载,驱动大版本一致就可以使用,不需版本号一模一......
  • 20211317李卓桐 Exp8 Web安全 实验报告
    Exp8Web安全实验报告实践内容(1)Web前端HTMLWeb前端HTML(2)Web前端javascipt理解JavaScript的基本功能,理解DOM。在(1)的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+输入的用户名”尝试注入攻击:利用回显用户名注入HTML及JavaScript。(3......
  • 117文章解读与程序——太阳能学报EI\CSCD\北大核心《多种调度模式下的光储电站经济
    ......
  • 11.Golang中的切片
    1、为什么要使用切片因为数组的长度是固定的并且数组长度属于类型的一部分,所以数组有很多的局限性。例如:packagemainfuncarraySum(x[4]int)int{sum:=0for_,v:=rangex{ sum=sum+v}returnsum}funcmain(){a:=[4]int{1,......
  • dotnet C# 创建 X11 应用时设置窗口背景颜色
    本文将告诉大家如何在X11里面创建一个窗口时,设置窗口的背景颜色在dotnetC#设置X11应用窗口背景透明的基础上,可以通过创建XColor结构体,将XColor赋值给到XSetWindowAttributes的background_pixel进行设置窗口的初始化背景颜色核心实现如下先创建XColor结构体,代......
  • ARC119F 题解
    blog。被自动机做法恶心到了,现在也来恶心一下大家。\(\color{red}\textbf{以下内容强烈建议自己推一遍,几乎一半是重复的,推完会很爽,并且理解会很深。}\)\(\color{red}\textbf{以下内容不建议用}\LaTeX\textbf{书写,因为写起来像在吃大便。}\)暴力\(dp_{i,a,b}\)表示当前在\(......
  • 解决历理 Win11下载及使用
    Win11下载地址:ed2k://|file|zh-cn_windows_11_consumer_editions_x64_dvd_904f13e4.iso|5517273088|DFD1AE88E36516B87382FC3D3D3F46AD|/普通版家庭版升级专业版密钥:VK7JG-NPHTM-C97JM-9MPGT-3V66T使用步骤:第一步:使用迅雷下载Win11系统第二步:rufus-3.11制作工具,使用其制作系......
  • C++11中的新特性(2)
    C++111可变参数模板2emplace_back函数3lambda表达式3.1捕捉列表的作用3.2lambda表达式底层原理4包装器5bind函数的使用1可变参数模板在C++11之前,模板利用class关键字定义了几个参数,那么我们在编译推演中,我们就必须传入对应的参数,如下图函数模板所示(类模板也......
  • DHT11温湿度模块的简单使用与代码(江科大代码风格)
    目录模块接线测量范围模块代码DTH11.hDHT11.c模块接线测量范围相对湿度:5%~95%RH温度:-20~60℃模块代码DTH11.h#ifndef_DHT11_H_#define_DHT11_H_#include"stm32f10x.h"//Deviceheader//上电后等待1秒才调用函数......
  • 111
    宋阳ggb10付书恒男1229.1张湛谦男14520郭立恒男141.1王硕男15132王华立女131.2李寅睿男131.3#include<iostream>usingnamespacestd;structr{ stringname; intage; stringx_b; doublec_j;};intmain(){ ra[7]; doublesum=0; fo......