DAY10,DAY11|逆波兰表达式,有效括号,删除字符串中重复项

文章目录

      • 232.用栈实现队列
      • 225.用队列实现栈
      • 20.有效的括号
      • 1047.删除字符串中的所有重复项
      • 150.逆波兰表达式

232.用栈实现队列

文档讲解:用栈实现队列

视频链接:代码随想录-用栈实现队列

状态:ok

思路:

用两个栈实现队列操作;定义两个栈,一个栈用于出栈outStack,另一个栈用于入栈inStack;当outStack为空时,则将inStack中的元素依次出栈并且加入到outStack中;

代码:

class MyQueue {Stack<Integer> inStack;Stack<Integer> outStack;public MyQueue() {inStack = new Stack();outStack = new Stack();}public void push(int x) {inStack.push(x);}public int pop() {inToOutParam();return outStack.pop();}public int peek() {inToOutParam();return outStack.peek();}public boolean empty() {return inStack.isEmpty() && outStack.isEmpty();}//将inStack中的元素加入到outStack中public void inToOutParam() {if (outStack.isEmpty()) {while (!inStack.isEmpty()) {Integer param = inStack.pop();outStack.push(param);}}}
}

225.用队列实现栈

文档讲解:用队列实现栈

视频链接:代码随想录-用队列实现栈

状态:ok

思路:

用一个队列实现栈的话,入栈可以正常从队列的入口进入,出栈的时候将队列pop进行size-1次,然后依次重新push到队列,最后再进行一次pop将移除元素返回即可;

代码:

class MyStack {Deque<Integer> deque;public MyStack() {deque = new ArrayDeque<>();}public void push(int x) {deque.addFirst(x);}public int pop() {//此时,用一个队列实现栈的元素应该在队尾,我们将队列前边的所有元素都重新加入队列int num = deque.size() - 1;while (num > 0) {Integer last = deque.removeLast();deque.addFirst(last);num--;}return deque.removeLast();}public int top() {return deque.getFirst();}public boolean empty() {return deque.isEmpty();}
}

20.有效的括号

文档讲解:有效的括号

视频链接:代码随想录-有效的括号

状态:自己思路写的虽然成功了,但是代码效率不高

思路:

自己的思路是,创建两个栈,一个栈按照字符串的顺序放入一个栈strStack中,另一个栈tempStack用来临时存放左括号;

1、先将字符串字符从字符串尾至头依次压入strStack栈;

2、依次对strStack出栈,如果是左括号,则直接放入temp栈中,如果是右括号,则判断tempStack栈中的左括号和当前的右括号是否匹配,如果匹配则将tempStack也出栈,如果不匹配直接返回false;

3、最后判断两个栈是否都是空,如果都是空则校验通过;

代码:

class Solution {public boolean isValid(String s) {Stack<Character> tempStack = new Stack<>();Stack<Character> strStack = new Stack<>();for (int i = s.length()-1; i >=0; i--) {strStack.push(s.charAt(i));}while (!strStack.isEmpty()) {Character pop = strStack.pop();if (isLeft(pop)) { //如果是左括号就加入到temp栈中;tempStack.push(pop);continue;}if (isRight(pop)) {if (tempStack.isEmpty()) {return false;}//对temp进行出栈,如果temp出栈和pop对应上,则双双跳出,如果没对应上,直接返回false;if (isMatch(tempStack.peek(), pop)) {tempStack.pop();} else {return false;}}}return tempStack.isEmpty() && strStack.isEmpty();}public boolean isLeft(Character s) {return '(' == s || '[' == s || '{' == s;}public boolean isRight(Character s) {return ')' == s || ']' == s || '}' == s;}public boolean isMatch(Character left, Character right) {if ('(' == left && ')' == right) {return true;}if ('[' == left && ']' == right) {return true;}if ('{' == left && '}' == right) {return true;}return false;}
}

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

文档讲解:删除字符串中的重复项目

视频链接:代码随想录-删除字符串中的所有重复项

状态:ok

思路:

1、定义一个栈,用来存放相邻不重复的字符;

2、对字符串s进行遍历,每次遍历到的字符c对栈顶元素进行比较,如果相同则栈顶进行pop,如果不相同则将字符c压入栈;

3、最后将栈中的元素按照栈底到栈顶的顺序输出成字符串返回即可;

代码:

class Solution {public String removeDuplicates(String s) {//定义一个栈从来存放未重复的字母元素Deque<Character> deque = new ArrayDeque();for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);if (deque.isEmpty() || deque.getFirst() != c) {deque.addFirst(c);} else {deque.removeFirst();}}StringBuilder sb = new StringBuilder();while (!deque.isEmpty()) {sb.append(deque.removeLast());}return sb.toString();}
}

150.逆波兰表达式

文档讲解:逆波兰表达式

视频链接:代码随想录-逆波兰表达式

状态:之前做过逆波兰表达式的题,这题需要注意的是用弹出的第二个元素来作为"-“或者”/"的主数;

思路:

1、先创建一个用于存放操作数的栈numStack;

2、遍历整个数组,如果不为操作数则push进操作数栈numStack中,如果为操作符的话,则从操作数栈中弹出两个操作数进行运算,并且将运算结果重新push进numStack中;

3、最后的计算结果就是numStack的最后一个元素,即栈顶元素;

代码:

class Solution {public int evalRPN(String[] tokens) {//用于存放操作数的栈Stack<Integer> numStack = new Stack<>();for (int i = 0; i < tokens.length; i++) {String token = tokens[i];if (isCompute(token)) {Integer num1 = numStack.pop();Integer num2 = numStack.pop();if ("+".equals(token)) {numStack.push(num1+num2);}if ("-".equals(token)) {numStack.push(num2-num1);}if ("*".equals(token)) {numStack.push(num2*num1);}if ("/".equals(token)) {numStack.push(num2/num1);}} else {numStack.push(Integer.valueOf(token));}}return numStack.pop();}public boolean isCompute(String s) {return "+".equals(s) || "-".equals(s) || "*".equals(s) || "/".equals(s);}
}

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

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

相关文章

大模型面试准备(十一):怎样让英文大语言模型可以很好的支持中文?

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何备战、面试常考点分享等热门话题进行了深入的讨论。 合集在这…

设计模式(11):适配器模式

一.什么使适配器模式&#xff1f; 将一个类的接口转换成客户希望的另外一个接口&#xff0c;Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。 二.模式中的角色 目标角色(Target)&#xff1a; 客气所期待的接口。目标可以是具体的或抽象的类&#…

C++20中的jthread

一、多线程开发 c11以前&#xff0c;是不包含线程库的&#xff0c;开发多线程&#xff0c;必须使用OS系统自带的线程API&#xff0c;这就导致了很多问题&#xff0c;最主要的是&#xff0c;跨平台的开发&#xff0c;一般要保持几个主流应用的库的代码支持&#xff0c;特别是对…

关于缓存的一些问题

关于缓存的一些问题 1、缓存穿透 什么是缓存穿透&#xff1a; 缓存穿透指的是在使用缓存系统的过程中&#xff0c;对于不存在的数据不断地进行查询请求&#xff0c;导致这些请求都无法从缓存中获取到数据&#xff0c;最终达到了绕过缓存的目的&#xff0c;直接访问后端数据源…

C语言-文件操作函数基础+进阶标准输入流输出流

学习的流程 ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————…

RedisDesktopManager 安装

简介&#xff1a;安装redis可视化工具 一、下载压缩包 Redis 可视化工具 链接&#xff1a;https://pan.baidu.com/s/1P2oZx9UpQbXDsxJ3GPUeOQ 提取码&#xff1a;6rft Redis 命令窗口版本 链接&#xff1a;https://pan.baidu.com/s/1mIuxCEWwD__aoqp1Cx8MFQ 提取码&#xf…

Lucene及概念介绍

Lucene及概念介绍 基础概念倒排索引索引合并分析查询语句的构成 基础概念 Document&#xff1a;我们一次查询或更新的载体&#xff0c;对比于实体类 Field&#xff1a;字段&#xff0c;是key-value格式的数据&#xff0c;对比实体类的字段 Item&#xff1a;一个单词&#xff0…

如何做一个知识博主? 行动

任何事情都需要经过两次创造 提前做一个预演&#xff0c;计划 【以一个计划开始】 你的解决方案究竟将怎样应用? 要根据目标想到所有的关键因素并列出所有的步骤和所有重要的细节。 需要想清楚这个事情成事最核心的胜负手关键因素&#xff1f; 【抓关键】 涨粉&#xff1a…

Decoupled Multimodal Distilling for Emotion Recognition 论文阅读

Decoupled Multimodal Distilling for Emotion Recognition 论文阅读 Abstract1. Introduction2. Related Works2.1. Multimodal emotion recognition2.2. Knowledge distillation3. The Proposed Method3.1. Multimodal feature decoupling3.2. GD with Decoupled Multimodal …

简单易懂的SQL添加数据教程

1. 引言&#xff1a; SQL&#xff08;Structured Query Language&#xff09;是一种处理关系型数据库的标准语言&#xff0c;包括插入&#xff08;INSERT)、更新&#xff08;UPDATE&#xff09;、删除&#xff08;DELETE&#xff09;等操作。在数据库操作中&#xff0c;添加数…

基于muduo网络库实现的集群聊天服务器

目录 项目内容开发环境安装说明技术介绍项目目录数据库设计项目介绍启动服务器启动客户端注册账号登录成功一对一聊天业务创建群聊业务加入群聊业务群聊业务添加好友业务离线消息存储业务 特殊说明 &#xff01;&#xff01;&#xff01;项目是照着腾讯课堂施磊老师的视频学习&…

NC20128 不重复数字

题目描述 给出N个数&#xff0c;要求把其中重复的去掉&#xff0c;只保留第一次出现的数。 例如&#xff0c;给出的数为1 2 18 3 3 19 2 3 6 5 4&#xff0c;其中2和3有重复&#xff0c;去除后的结果为1 2 18 3 19 6 5 4。 输入描述: 输入第一行为正整数T&#xff0c;表示…

04---java面试八股文——spring-----注解-------10题

31、ComponentScan注解的作用 ComponentScan 注解用于指定 Spring 容器在启动时要扫描的基础包路径&#xff0c;以及要扫描的包路径下应该被自动注册为 Spring bean 的类。 具体来说&#xff0c;ComponentScan 注解的作用有以下几个方面&#xff1a; 组件扫描&#xff1a;Comp…

docker部署DOS游戏

下载镜像 docker pull registry.cn-beijing.aliyuncs.com/wuxingge123/dosgame-web-docker:latestdocker-compose部署 vim docker-compose.yml version: 3 services:dosgame:container_name: dosgameimage: registry.cn-beijing.aliyuncs.com/wuxingge123/dosgame-web-docke…

How to install JDK on mac

文章目录 1. Install JDK on mac2. zshenv, zshrc, zprofile3. 查看java环境变量配置 1. Install JDK on mac Installation of the JDK on macOS 2. zshenv, zshrc, zprofile How Do Zsh Configuration Files Work? 3. 查看java环境变量配置 open Terminal&#xff0c;cd…

02-JDK新特性-Lambda表达式

JDK新特性 Lambda表达式 什么是Lambda表达式 Lambda表达式是一个匿名代码块&#xff0c;用于简单的传递一段代码片段。 Lambda表达式标准格式 格式&#xff1a;(形式参数) -> {代码块} 形式参数 如果有多个参数&#xff0c;参数只见用逗号隔开&#xff1b;如果没有&…

普通数据库索引与搜索引擎的索引有何区别

普通数据库索引&#xff0c;如关系型数据库&#xff08;RDBMS&#xff09;中的B树&#xff08;B-tree&#xff09;或哈希索引&#xff0c;与搜索引擎使用的倒排索引&#xff08;Inverted Index&#xff09;之间存在几个关键区别&#xff1a; 数据结构&#xff1a; 普通数据库索…

【Linux 10】环境变量

文章目录 &#x1f308; Ⅰ 命令行参数⭐ 1. main 函数的参数⭐ 2. main 函数参数的意义⭐ 3. 查看 argv 数组的内容⭐ 4. 命令行参数结论⭐ 5. 为什么要有命令行参数⭐ 6. 命令行参数传递由谁执行 &#x1f308; Ⅱ 环境变量基本概念⭐ 1. 常见环境变量 &#x1f308; Ⅲ 查看…

macOS Catalina for mac (macos 10.15系统)v10.15.7正式版

macOS Catalina是苹果公司专为麦金塔电脑推出的桌面操作系统&#xff0c;是macOS的第16个主要版本。它继承了苹果一贯的优雅与高效&#xff0c;不仅引入了分割视图和侧边栏&#xff0c;还带来了全新的音乐和播客应用&#xff0c;极大地提升了用户体验。在隐私保护和安全性方面&…

【Laravel】07 快速套用一个网站模板

【Laravel】07 快速套用一个网站模板 1. 新增post表2.补充 &#xff1a;生成Model、Controller、迁移文件3. 使用php artisan tinker4. 网站模板下载 课程地址 1. 新增post表 在Model中创建Post (base) ➜ example-app php artisan make:model Post Model created successfu…