代码随想录算法训练营第十一天(栈与队列)| 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

news2024/11/16 13:32:44

代码随想录算法训练营第十一天(栈与队列)| 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

20. 有效的括号

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

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

题目链接/文章讲解/视频讲解:
在这里插入图片描述

看到题目的第一想法:

1.如果此时字符串的字符是’(‘,’[‘,’{‘时就进栈
2.在栈不为空的前提下,进行对应出栈
3.若此时字符串的字符为’)',而出栈的字符不是’(‘就返回false。其他的同理

public boolean isValid(String s) {
        Stack<Character> stack1 = new Stack<>();
        Character pop;
        for(int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if(ch == '(' || ch == '[' || ch == '{') {
                stack1.push(ch);
            }
            if(stack1.isEmpty())
                return false;
            if(ch == ')') {
                pop = stack1.pop();
                if(pop != '(')
                    return false;
            }
            else if(ch == ']') {
                pop = stack1.pop();
                if(pop != '[')
                    return false;
            }
            else if(ch == '}') {
                pop = stack1.pop();
                if(pop != '{')
                    return false;
            }
        }
        if(!stack1.isEmpty())
            return false;
        return true;
    }

看完代码随想录之后的想法:

1.如果字符串的字符为’(‘就进栈’)‘,字符为’[‘就进栈’]‘,字符为’{‘就进栈’}'.
2.如果栈为空且栈顶元素不等于预想值,则返回false
3.剩下的元素栈不为空,且等于预想值,则pop栈

public boolean isValid1(String s) {
        Stack<Character> stack1 = new Stack<>();
        for(int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if(ch == '(')
                stack1.push(')');
            else if(ch == '[')
                stack1.push(']');
            else if(ch == '{')
                stack1.push('}');
            else if(stack1.isEmpty() || stack1.pop() != ch)
                return false;
            else
                stack1.pop();
        }
        return stack1.isEmpty();
    }

自己实现过程中遇到哪些困难:

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

栈的经典应用。

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

题目链接/文章讲解/视频讲解:

在这里插入图片描述

看到题目的第一想法:

1.利用栈一个个读字符串的字符,若进栈的字符与栈顶字符相等,则pop一个字符
2.遍历完字符串后,将栈中的字符添加到StringBuilder中
3.然后将构造的StringBuilder字符反向输出

package com.second.day11;

import java.util.Stack;

public class removeDuplicates_1047 {
    public String removeDuplicates(String s) {
        Stack<Character> stack = new Stack<>();
        for(int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if(!stack.isEmpty() && stack.peek() == ch)
                stack.pop();
            else
                stack.push(ch);
        }
        StringBuilder sb = new StringBuilder();
        while(!stack.isEmpty()) {
            sb.append(stack.pop());
        }
        return sb.reverse().toString();
    }
}

看完代码随想录之后的想法:

思想是一样的

自己实现过程中遇到哪些困难:

150. 逆波兰表达式求值

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

题目链接/文章讲解/视频讲解:
在这里插入图片描述

看到题目的第一想法:

一次读取字符,如果读取的字符为操作数”+,-,*,/“,则从栈中取出两个数,然后进行对应的操作后,将计算后的数再入栈。

package com.second.day11;

import java.util.Arrays;
import java.util.Stack;

public class EvalRPN_150 {
    public int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<>();
        for(int i = 0; i < tokens.length; i++) {
            String ch = tokens[i];
            if(ch.equals("+") || ch.equals("-") || ch.equals("*") || ch.equals("/")) {
                int b = stack.pop();
                int a = stack.pop();
                if(ch.equals("+")) {
                    stack.push((a + b));
                }
                else if(ch.equals("*")) {
                    stack.push((a * b));
                }
                else if(ch.equals("-")) {
                    stack.push((a - b));
                }
                else {
                    stack.push((a / b));
                }
            }
            else {
                stack.push(Integer.valueOf(ch));
            }
        }
        return stack.pop();
    }

    public static void main(String[] args) {
        String[] tokens = new String[]{"2","1","+","3","*"};
        EvalRPN_150 evalRPN_150 = new EvalRPN_150();
        System.out.println(evalRPN_150.evalRPN(tokens));
    }
}

看完代码随想录之后的想法:

思路是一样的

自己实现过程中遇到哪些困难:

字符串转变为整形数字
Integer.valueOf()
Integer.parseInt()

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

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

相关文章

激发原创力量,逐梦数智未来 | 麒麟信安闪耀openEuler Summit 2022

[中国&#xff0c;北京&#xff0c;2022年12月29日]由欧拉开源社区发起并联合华为、麒麟信安、麒麟软件、统信软件等伙伴&#xff0c;共同举办的openEuler Summit 2022于线上举行。 会上&#xff0c;开放原子开源基金会宣布openEuler项目群成立&#xff1b;同时&#xff0c;新…

CVPR 2021|Deep-SfM-Revisited:DeepLearn+经典SfM流程

&#x1f3c6;前言&#xff1a;文章回顾了深度学习在SfM中的应用&#xff0c;并提出了一种新的深度两视图SfM框架。该框架结合了深度学习和经典SfM几何算法的优点。在各个数据集上取得较好的结果。 文章目录解决的问题基本流程实施细节光流估计相机位姿估计尺度不变的深度估计损…

关于安科瑞电力监控系统在电力工程中的应用与对策

摘要&#xff1a;随着经济的发展&#xff0c;能源消耗速度正不断加快&#xff0c;因此我国提出了绿色可持续发展战略&#xff0c;要求在发展建设中以节能为主&#xff0c;不断减少资源能耗&#xff0c;而电能便是首要控制内容。如今我国为电能使用&#xff0c;对计量表进行了优…

《PyTorch深度学习实践》完结合集-P4反向传播作业

二次函数的反向传播 代码&#xff1a; import torch x_data [1.0, 2.0, 3.0] y_data [2.0, 4.0, 6.0] w1 torch.Tensor([1.0]) w1.requires_grad True #定义要进行反向传播 w2 torch.Tensor([1.0]) w2.requires_grad True b torch.Tensor([1.0]) b.requires_grad T…

PHP结课报告-简单的点菜系统(完整版,附源码与数据库)

1 系统背景及意义 1.1系统开发背景介绍 餐饮业在我国有着悠久的发展历史&#xff0c;是与人民生活密切相关的 行业之一&#xff0c;同时也是我国经济增长的新亮点&#xff0c;在 2010 年全国餐饮零 售总额高达 15913 亿元&#xff0c;实际增长约 14.3。在信息系统相对普及的 今…

项目经理通过甘特图编制项目计划的方法

项目有个特征叫 渐进明晰 &#xff0c;指一个项目不可能一开始就能想到最后交付成果的全部细节&#xff0c;项目最终的交付成果到底长啥样是随着项目的推进慢慢变得清晰的&#xff0c;而这个变化的过程不仅需要项目经理的经验与能力&#xff0c;还需要借助项目管理工具的帮助。…

一文讲清「敏捷路线图」,从此不再掉入瀑布陷阱

尽管许多组织和团队声称自己非常敏捷&#xff0c;但他们仍在使用瀑布的方式规划产品。为什么会这样&#xff1f;我们该如何改变这种「错误敏捷」&#xff1f; 原则上&#xff0c;践行敏捷开发很简单&#xff1a;构建一个增量&#xff1b;测试这个增量&#xff1b;了解需要改变…

webdriver的尝试:四 【移动端的使用appium-定位与获取代码】

文章目录界面的简单认识和使用参考我们前面使用webdriver可以实现&#xff1a;使用代码&#xff0c;自动化打开浏览器及指定页面&#xff0c;定位元素&#xff0c;获取内容或者模仿操作那么使用移动端&#xff0c;依然需要实现定位与操作 主要就是在appium inspector上进行操作…

开源全球公司贡献 49 名,涛思数据荣登 2022 中国开发者影响力年度榜单

12 月 28 日&#xff0c;CSDN 在北京举行 “2022 中国开发者影响力盛典暨 CSDN 企业生态汇”活动&#xff0c;同时正式发布 2022 中国开发者影响力年度榜单。本次公布的榜单主要包括年度开源贡献企业、年度开源影响力项目、年度开发者社区、年度数字化创新企业、年度优秀雇主企…

蓝桥杯Python练习题13-圆的面积

资源限制   内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述   给定圆的半径r&#xff0c;求圆的面积。 输入格式   输入包含一个整数r&#xff0c;表示圆的半径。 输出格式   输出…

自然语言处理复习

目录 第 3 章 深度学习基础 第 4 章 语言模型词向量 第 5 章 NLP中的注意力机制 第 6 章 NLP基础任务 第 7 章 预训练语言模型 第 3 章 深度学习基础 1. 人工神经网络 2. 激活函数 &#xff08;1&#xff09;激活函数的作用 为了增强网络的表达能力&#xff0c;需要引入…

在你的岗位中领导:为人力资源职员提供提升招聘管理能力

香港 (Xinwengao.com) — 每年外籍老师表示他们因为沟通问题停止考虑某间学校。这会发生有几个原因但大部分则是因为前线员工并没有感受到得到可以维持与候选人互动。 PD Academia 在此提供这个双语培训课程来帮助中国的学校提升招聘管理能力&#xff1a; 在你的岗位中领导&a…

数字藏品年终盘点:从长坡厚雪到无人问津,潮起潮落的2022

文/尹宁 出品/陀螺研究院 数字藏品&#xff0c;无疑是2022年我国区块链界最为瞩目的应用&#xff0c;在这一年中&#xff0c;数字藏品行业从高歌猛进到急速刹车、从企业扎堆到巨头退场&#xff0c;从需求高涨到被迫出清&#xff0c;经历了跌宕起伏、高潮迭起的发展历程。 上…

ARM64内存虚拟化分析(8)coalesed MMIO处理

从前面MMIO的处理可以看到&#xff0c;每次访问MMIO都会导致虚拟机退了到QEMU中。很多时候多个MMIO操作&#xff0c;这个时候可以先将前面的MMIO操作保存起来&#xff0c;等到最后一个MMIO的时候&#xff0c;再一起退出到QEMU中处理&#xff0c;这就是coalesced MMIO。目前只支…

新概念1 课文和单词(2022/12/28)

前言: 学了多年的英语&#xff0c;在交流或写作中或多或少有用错的地方。估计看这篇博客的你&#xff0c;或许也和我遇到同样的问题。 为此找新概念系列书籍4本&#xff0c;作为系统性查漏补缺的工具。每天更新10课内容&#xff0c;从基础到提升。从简单到深入&#xff0c;循序…

CSS 特殊字符 ‘#‘ 、‘.’ 、‘*’、‘:’、空格“ ”、 ‘>’ , ‘,’

# 号&#xff1a; #号的作用是对应html中的标签的id属性&#xff0c;写法为#name。如#p1{...}会给<p id"p1">ID is p1</p>增加样式。具体事例如下&#xff1a; HTML代码&#xff1a; <div id"p1"> </div><!-- CSS代码&#…

How to use template

1. 模板变量 注意&#xff1a;在manage.py路径下启动shell My name is hjb 我们可以调用Template类中的render方法来对模板进行一个渲染&#xff0c;这时需要用一个Context来传递它&#xff0c;这个Context是一系列变量和他们值得一个集合得字典 首先建立&#xff0c;然后再vie…

IT运维工单高效协同,助力打造一站式运维方案

随着经济全球化的发展趋势&#xff0c;信息系统在企业运营中占据着愈发重要的位置。业务系统越来越多&#xff0c;用户对信息系统的依赖性越来越强&#xff0c;关键业务系统的中断都将导致企业业务、服务的中断&#xff0c;极大的影响了企业业务稳定运行和持续发展。因此企业需…

使用Visual Studio Installer打包Unity的exe应用

前言 Unity在PC端更新软件的方法。 一、下图是Unity发布出来的应用 二、安装Microsoft Visual Studio Installer Projects插件 &#xff08;1&#xff09;打开vs&#xff0c;我这里用的是vs2019 &#xff08;2&#xff09;点击扩展->管理扩展&#xff0c;如果没有安装过&…

注册 openAI 与 ChatGPT 一起对话

文章目录1. 背景2. 注册短信接受平台3. 注册 OpenAI 账号3.1 邮箱注册3.2 手机验证4. 登陆并对话5. 场景预备条件&#xff1a;科学上网 1. 背景 ChatGPT 是有史以来向公众发布的最好的人工智能聊天机器人。它由旧金山人工智能公司 OpenAI 构建&#xff0c;该公司还负责 GPT-3 …