【数据结构与算法 | 基础篇】[栈专题]力扣20,150

1. 力扣20 : 有效的符号

(1). 题

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"
输出:true

示例 2:

输入:s = "()[]{}"
输出:true

示例 3:

输入:s = "(]"
输出:false

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

(2). 思路

自己设计了一个栈类. 首先判断该字符串是否是空字符串,如果不是空字符串,那么将栈的栈顶元素与字符串此时需要比较的字符值进行匹配,如果成功匹配,则将该栈顶元素移除pop,如果不匹配,那么将该字符值push到栈.

判断该字符串是否是有效的,只需判断栈是否为空即可.

(3). 解

class Solution {public boolean isValid(String s) {//如果是空字符串if(s.length() == 0) {return true;}EnStack stack = new EnStack(s.length());int i = 0;while(i < s.length()) {if(stack.peek() == '(' && s.charAt(i) == ')') {stack.pop();} else if (stack.peek() == '{' && s.charAt(i) == '}') {stack.pop();} else if(stack.peek() == '[' && s.charAt(i) == ']') {stack.pop();} else {stack.push(s.charAt(i));}i++;}return stack.isEmpty();}
}
class EnStack{//栈顶指针private int top;private char[] stack;public EnStack(int capacity) {stack = new char[capacity];}public void push(char value) {if(isFull()) {return;}stack[top++] = value;}public void pop() {if (isEmpty()) {return;}--top;}public char peek() {if(isEmpty()) {//只要返回的不是'{','[','('其中之一的字符就行return 'a';}return stack[top - 1];}public boolean isFull() {return top == stack.length;}public boolean isEmpty() {return top == 0;}
}

2. 力扣150 : 逆波兰表达式求值

(1). 题 : 

给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。

请你计算该表达式。返回一个表示表达式值的整数。

注意:

  • 有效的算符为 '+''-''*' 和 '/' 。
  • 每个操作数(运算对象)都可以是一个整数或者另一个表达式。
  • 两个整数之间的除法总是 向零截断 。
  • 表达式中不含除零运算。
  • 输入是一个根据逆波兰表示法表示的算术表达式。
  • 答案及所有中间计算结果可以用 32 位 整数表示。

示例 1:

输入:tokens = ["2","1","+","3","*"]
输出:9
解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9

示例 2:

输入:tokens = ["4","13","5","/","+"]
输出:6
解释:该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6

示例 3:

输入:tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"]
输出:22
解释:该算式转化为常见的中缀算术表达式为:((10 * (6 / ((9 + 3) * -11))) + 17) + 5
= ((10 * (6 / (12 * -11))) + 17) + 5
= ((10 * (6 / -132)) + 17) + 5
= ((10 * 0) + 17) + 5
= (0 + 17) + 5
= 17 + 5
= 22

提示:

  • 1 <= tokens.length <= 104
  • tokens[i] 是一个算符("+""-""*" 或 "/"),或是在范围 [-200, 200] 内的一个整数

逆波兰表达式:

逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。

  • 平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 ) 。
  • 该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * ) 。

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

  • 去掉括号后表达式无歧义,上式即便写成 1 2 + 3 4 + * 也可以依据次序计算出正确结果。
  • 适合用栈操作运算:遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中

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

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

相关文章

初学者都能掌握的操作符(中)

&#xff08;1&#xff09;位操作符&#xff08;& | ^&#xff09; &&#xff1a;&#xff08;按二进制位“与”&#xff09; 也就是两个数的每一位二进制数按照 “与” 的算法&#xff0c;如下&#xff1a; int a 3 ,b 5 ; c a & b; 我们首先写出a和b的二进…

退格(删除)键

题目描述 用 来表示退格键&#xff0c;遇到 来表示退格键&#xff0c;遇到 来表示退格键&#xff0c;遇到就删除上一位字符&#xff08;如果有&#xff09; 在键盘上从左到右一次输入一串字符串&#xff0c;请输出最终字符的个数。注&#xff1a;退格键不会出现在最终的剩余字…

5.23.12 计算机视觉的 Inception 架构

1. 介绍 分类性能的提升往往会转化为各种应用领域中显着的质量提升&#xff0c;深度卷积架构的架构改进可用于提高大多数其他计算机视觉任务的性能&#xff0c;这些任务越来越依赖于高质量的学习视觉特征。在 AlexNet 功能无法与手工设计、制作的解决方案竞争的情况下&#xf…

如何评价刘强东说“业绩不好的人不是我兄弟”

在近日的一次京东管理层会议上&#xff0c;创始人刘强东以不容置疑的口吻表明了对公司文化的坚定态度&#xff1a;“凡是长期业绩不好&#xff0c;从来不拼搏的人&#xff0c;不是我的兄弟。”这句话不仅是对那些工作表现不佳的员工的直接警告&#xff0c;也透露出京东在追求业…

three.js能实现啥效果?看过来,这里都是它的菜(08)

在Three.js中实现旋转动画的原理是通过修改对象的旋转属性来实现的&#xff0c;通常使用渲染循环&#xff08;render loop&#xff09;来更新对象的旋转状态&#xff0c;从而实现动画效果。 具体的原理包括以下几个步骤&#xff1a; 创建对象&#xff1a;首先创建一个需要旋转…

AIGC-风格迁移-style Injection in Diffusion-CVPR2024HighLight-论文精度

Style Injection in Diffusion: A Training-free Approach for Adapting Large-scale Diffusion Models for Style Transfer-CVPR2024HighLight 代码&#xff1a;https://github.com/jiwoogit/StyleID 论文&#xff1a;https://jiwoogit.github.io/StyleID_site/ 为了解决风格迁…

python3.12虚拟环境下ModuleNotFoundError: No module named ‘distutils‘的解决办法

python3.12下面venv虚拟环境&#xff0c;安装pwntools&#xff0c;运行Ropgadget提示&#xff1a;ModuleNotFoundError: No module named distutils’的解决办法 (py3xt) :~/py3/bin$ ROPgadget Traceback (most recent call last):File "/home/a24/py3xt/bin/ROPgadget…

你真的会使用Vue3的onMounted钩子函数吗?Vue3中onMounted的用法详解

目录 一、onMounted的前世今生 1.1、onMounted是什么 1.2、onMounted在vue2中的前身 1.2.1、vue2中的onMounted 1.2.2、Vue2与Vue3的onMounted对比 1.3、vue3中onMounted的用法 1.3.1、基础用法 1.3.2、顺序执行异步操作 1.3.3、并行执行多个异步操作 1.3.4、执行一次…

Rust腐蚀怎么用服务器一键开服联机教程

1、进入控制面板 首次登陆需要点击下方重置密码&#xff0c;如何再点击登录面板&#xff0c;点击后会跳转到登录页面&#xff0c;输入用户名和密码登录即可 2、设置游戏端口 由于腐蚀的设置需要三个端口&#xff0c;它们用于游戏端口&#xff08;必须为首选端口&#xff09;&a…

jenkins 部署golang 应用到k8s与测试环境

1.宿主机安装jenkins 不要用docker 为什么&#xff1a;docker jenkins你只有jenkins&#xff0c; 你想做golang编译的情况&#xff0c;它的镜像里面缺少go环境。 而宿主机安装的情况&#xff0c;jenkins是可以通过环境变量修改来访问宿主机里面安装的内容。 2.插件 // docke…

FFMPEG 解码过程初步学习

1. 视频文件解码过程 解码过程 步骤如下&#xff1a; 视频文件&#xff08;封装格式&#xff0c;MP4/FLV/AVI 等&#xff09;获取视频格式信息等解复用为Stream 流&#xff0c; 准备解码用的Codec将Stream 流 使用解码器解为Raw 格式针 1.1 音视频格式填充&#xff1a; int…

找不到msvcr110.dll无法继续执行代码的原因分析及解决方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是找不到msvcr110.dll文件。这个错误通常发生在运行某些程序或游戏时&#xff0c;系统无法找到所需的动态链接库文件。为了解决这个问题&#xff0c;下面我将介绍5种常见的解决方法。 一&#…

Vue3实现上传照片以及回显

Vue3实现上传照片以及回显 一、安装Element Plus二、案例1、基本示例 三、进阶案例1、代码2、代码解释1、上传接口展示2、查询接口展示组件属性 3、效果展示 一、安装Element Plus 使用 Element Plus 组件库来实现上传照片和回显同样很简单&#xff0c;你可以按照以下步骤进行…

用栈实现队列(C语言)

目录 题目题目分析 代码栈的实现结构体。栈的初始化栈的销毁 入栈删除查找顶部数据判空 答案结构体初始化插入数据删除数据获取队列开头元素判空销毁栈 题目 题目分析 链接: 题目 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、po…

数据库查询中——having与where的用法

数据库查询中——having与where的用法 HAVING 子句在 SQL 中主要用于与 GROUP BY 子句一起使用&#xff0c;以过滤聚合函数的结果。当你使用 GROUP BY 对数据进行分组&#xff0c;并希望基于这些分组后的数据进一步过滤时&#xff0c;你会使用 HAVING 子句。 HAVING 子句通常与…

pyside6下没有designer.exe、pyside6-uic.exe等

使用conda安装的pyside6&#xff08;conda install pyside6&#xff09;&#xff0c;发现pyside6目录下没有designer.exe、pyside6-uic.exe等&#xff1b;designer.exe在Miniconda3/Library/bin下 pyside6-uic.exe、pyside6-rcc.exe在Miniconda3\Scripts下 但是 使用pip安装…

企业内网自建yum源 仓库 | rsync同步方案

文章目录 1.背景概述2.获取软件文件2.1 准备同步脚本如下 2.2 准备例外文件清单2.3 统计源端大小2.3 运行脚本开始同步文件 3. 创建网页服务3.1 安装nginx并启用3.2 修改ngnix配置文件 4 创建repo索引和客户文件4.1 创建repo索引4.2 创建客户端文件4.3 客户端下载repo文件 1.背…

用 Python 编写网络爬虫:从网页获取数据并存储到 Excel 文件

在本篇博客中,我们将介绍如何使用 Python 编写一个简单的网络爬虫,用于从网页中提取数据,并将这些数据存储到 Excel 文件中。我们将使用 Python 中的一些库来实现这个功能,包括 urllib.request、BeautifulSoup 和 openpyxl。 1. 网络爬虫的基本原理 网络爬虫是一种程序,…

【MyBatis】MyBatis解析全局配置文件源码详解

目录 一、前言 思维导图概括 二、配置文件解析过程分析 2.1 配置文件解析入口 2.2 初始化XMLConfigBuilder 2.3 XMLConfigBuilder#parse()方法&#xff1a;解析全局配置文件 2.3.1 解析properties配置 2.3.2 解析settings配置 2.3.2.1 元信息对象&#xff08;MetaClas…

解决移植Metasploitable3到VM虚拟机无网络的问题

第一步 导入后不要开机&#xff0c;先在虚拟机设置里面将原有的两个网络适配器移除。 第二步 接着在选项里面&#xff0c;在客户机操作系统里面&#xff0c;选择Microsoft Windwos(W)&#xff0c; 版本选择Windows Server 2008 R2 x64 第三步 先打开虚拟机&#xff0c;然后…