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

news2024/12/23 9:39:54

文章目录

  • Leetcode 20. 有效的括号
    • 题目详解
    • 数据结构 双端队列(deque)
      • Deque有三种用途:
    • 思路
    • 报错
    • Ac代码
  • Leetcode1047. 删除字符串中的所有相邻重复项
    • 题目详解
    • 数据结构 ArrayDeque类
    • 思路
    • AC代码
  • 150. 逆波兰表达式求值
    • 题目详解
    • 报错
    • 难点
    • AC代码
    • 收获

Leetcode 20. 有效的括号

题目详解

数据结构 双端队列(deque)

deque (double-ended
queue,双端队列)是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。

Deque有三种用途:

  • 普通队列(一端进另一端出):
Queue queue = new LinkedList()Deque deque = new LinkedList()
  • 双端队列(两端都可进出)
Deque deque = new LinkedList()
  • 堆栈
Deque deque = new LinkedList()

注意:Java堆栈Stack类已经过时,Java官方推荐使用Deque替代Stack使用。Deque堆栈操作方法:push()、pop()、peek()。引用自博主devnn

思路

分三种情况进行讨论
1 左括号多了

如果都判断完了字符串里的i都走了一遍,栈里还有东西 不为空 也return false在这里插入图片描述

2 匹配类型不一样

stack.peek() != a[i];

3 右括号多了 在消消乐时,发现字符串没消除完 栈空了

只需要判断栈stack 是否为空集就可以了
stack.isEmpty(); return false;

在这里插入图片描述
在这里插入图片描述

报错

关于java中的“error: bad operand types for binary operator
在这里插入图片描述
前后类型不一致 后来一看是因为 我在定义deque时 忘记将其 character了
Deque<Character> st= new LinkedList<>();

Ac代码

class Solution {
    public boolean isValid(String s) {
   //定义一个双端队列
   Deque<Character> st= new LinkedList<>();
   // 进行for循环  用ch传递s[i]
   for(int i=0;i<s.length();i++)
   {
       char ch= s.charAt(i);
       if(ch == '(')
         { st.push(')');}
       else if( ch =='{') 
          {st.push('}');}
       else if(ch == '[')
          {st.push(']');}
       //进行右边判断
       else if
       ( st.isEmpty() || st.peek() != ch)
        {
        return false;
        }
       else
           st.pop();  //如果相等的话        
   }
        return st.isEmpty();
    }
    
}

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

题目详解

数据结构 ArrayDeque类

ArrayDeque类是 双端队列的线性实现类。
☞ ArrayDeque是采用数组方式实现的双端队列。
☞ ArrayDeque的出队入队是通过头尾指针循环,利用数组实现的。
☞ ArrayDeque容量不足时是会扩容的,每次扩容容量增加一倍。
☞ ArrayDeque可以直接作为栈使用。当用作栈时,性能优于Stack,当用于队列时,性能优于LinkedList。
————————————————
引用博主「妙乌」的文章

思路

与上一道题相似 都是消除类的题,这道题里的栈放的是已经遍历过的数据

AC代码

class Solution {
    public String removeDuplicates(String s) {
        ArrayDeque<Character> st =new ArrayDeque<>();
        char ch;
        for(int i=0;i<s.length();i++)
        {
             ch =s.charAt(i);
             if( st.isEmpty()|| st.peek()!= ch)
             {
                 st.push(ch);
             }
             else
             {
                 st.pop();
             }

        }
         String result ="";
         while(! st.isEmpty())
         {
             result= st.pop()+result;
         }
         return result;
    }
}

150. 逆波兰表达式求值

题目详解

后缀表达式 计算机只要按着顺序去处理这个字符串就可以 用的栈

报错

 

>   java.lang.NumberFormatException: For input string: "/"

在这里插入图片描述
在这里插入图片描述
虽然报错的地方是下面 不过 根据报错信息来看 应该跟/有关仔细一看多了一个空格 导致报错了

难点

根据条件将符合条件的数据从栈中跳出来 很简单 ,稍微难点就是“-”
和“/” 那块有点特殊

else if( "-".equals(s))
         {
             stack.push(-stack.pop()+stack.pop());
         }

/

  else if("/".equals(s))
           {
                 int temp1 = stack.pop();
                int temp2 = stack.pop();
                stack.push( temp2/temp1);
           }

AC代码

class Solution {
    public int evalRPN(String[] tokens) {
      Deque <Integer> stack= new LinkedList<>();
       for(String s:tokens)
       {  // 注意 - 和/ 需要特殊处
           if( "+".equals(s))
           {
               stack.push(stack.pop()+stack.pop());
           }
           else if("-".equals(s))
           {
               stack.push( - stack.pop()+stack.pop());
           }
           else if("*".equals(s))
           {
               stack.push(stack.pop()* stack.pop());

           }
           else if("/".equals(s))
           {
                 int temp1 = stack.pop();
                int temp2 = stack.pop();
                stack.push( temp2/temp1);
           }
           else
           {
              stack.push( Integer.valueOf( s));
           }
       }
       return stack.pop();
    }
}

收获

今天开始使用Deque了 ,之前一直没接触过 双端队列 , 差不多可以了
我饿了
我去弄点吃的

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

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

相关文章

系分 - 系统设计

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录系分 - 系统设计考点摘要系统设计软件设计软件架构设计结构化设计概要设计详细设计处理流程设计流程工作流活动及其所有者工作项工作流管理系统WFMS的基本功能WFMS的组成WRM流程设计工具用户界面设计/人机…

python算法与数据结构1-算法、数据结构、链表

目录1、算法的概念1.1 举例&#xff1a;1.2 算法的五大特性&#xff1a;1.3 时间复杂度1.4 空间复杂度2、数据结构2.1 内存的存储结构2.2 数据结构的分类2.3 顺序表存储方式3、链表3.1链表实现3.2链表的方法3.3链表增加节点3.4链表删除节点3.5链表总结1、算法的概念 算法与数据…

(Java高级教程)第三章Java网络编程-第三节:UDP数据报套接字(DatagramSocket)编程

文章目录一&#xff1a;Java数据报套接字通信模型二&#xff1a;相关API详解&#xff08;1&#xff09;DatagramSocket&#xff08;2&#xff09;DatagramPacket三&#xff1a;UDP通信示例一&#xff1a;客户端发送什么服务端就返回什么&#xff08;1&#xff09;代码&#xff…

k8s之ConfigMap和secret

写在前面 我们知道k8s的数据都是存储到kv数据库etcd中的&#xff0c;那么我们程序中使用到各种配置信息是否可以也存储到etcd&#xff0c;然后在pod中使用呢&#xff1f;是可以的&#xff0c;k8s为了实现将自定义的数据存储到etcd&#xff0c;定义了ConfigMap 和secret两种API…

《后端技术面试 38 讲》学习笔记 Day 01

《后端技术面试 38 讲》学习笔记 Day 01 学习目标 在2022年春节将至&#xff08;半个月&#xff09;&#xff0c;适合在这个冬天里&#xff0c;温故知新。通过学习一门覆盖面较广的课程&#xff0c;来夯实基础&#xff0c;完善自己的知识体系&#xff0c;是一个很棒的选择。 …

LCHub:未来,低代码产品矩阵是500强企业的绝佳选择

近日,国内知名咨询机LCHub发布2022《中国大型企业数字化升级路径研究》。 报告认为由于大型企业的数字化需求旺盛、购买力充足,因此国内成熟的数字化服务商普遍以大型企业为核心客户。大型企业与数字化服务商的供需磨合决定了我国数字化市场的形态,造就了我国数字化市场与海…

go map 源码逐行阅读

map粗略介绍 源码开头注释&#xff1a; A map is just a hash table. The data is arranged into an array of buckets. Each bucket contains up to 8 key/elem pairs. The low-order bits of the hash are used to select a bucket. Each bucket contains a few high-order…

Linux学习笔记——RabbitMQ安装部署

5.4、RabbitMQ安装部署 5.4.1、简介 RabbitMQ是一款知名的开源消息列队系统&#xff0c;为企业提供消息的发布、订阅、点对点传输等消息服务。 RabbitMQ在企业开发中十分常见&#xff0c;课程为大家演示快速搭建RabbitMQ环境。 5.4.2、安装 RabbitMQ在yum仓库中的版本比较老…

用于从单细胞FRET数据中提取灵敏度分布的Matlab代码

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 对于分子生物学来讲&#xff0c;生物分析手段的发展&#xff0c;是阐明机理的必要条件。在研究分子间相互作用的道路上&#xf…

Leetcode - 106 - 相交链表

160. 相交链表 题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&am…

【阶段三】Python机器学习04篇:机器学习项目实战:多元线性回归模型、岭回归模型与套索回归模型

本篇的思维导图: 一元线性回归的数学原理 一元线性回归模型又称为简单线性回归模型,其形式可以表示为如下所示的公式。 y=ax+b 其中,y为因变量,x为自变量,a为回归系数,b为截距。 如下图所示,其中y(i)为实际值,y(i)为预测值,一元线性回归的目的就是拟合出一…

Vision-Only Robot Navigation in a Neural Radiance World

Paper name Vision-Only Robot Navigation in a Neural Radiance World Paper Reading Note URL: https://arxiv.org/abs/2110.00168 TL;DR RA-L 2022 文章&#xff0c;提出在 NeRF 表达的环境中进行机器人导航及循迹任务的方法 Introduction 背景 基于 on-board 传感器…

HTML与CSS基础(五)—— CSS布局(盒子模型)、PxCook使用

目标能够认识 盒子模型 的组成部分 能够掌握盒子模型的 边框、内边距、外边距 的作用及简写形式能够计算盒子的 实际大小 能够了解 外边距折叠现象&#xff0c;并知道如何解决 盒子塌陷问题一、PxCook的基本使用1. 通过软件打开设计图① 打开软件 ② 拖拽入设计图 ③ 新建项目2…

Acwing---99.激光炸弹

激光炸弹1.题目2.基本思想3.代码实现1.题目 地图上有 NNN 个目标&#xff0c;用整数 Xi,YiXi,YiXi,Yi 表示目标在地图上的位置&#xff0c;每个目标都有一个价值 WiWiWi。 注意&#xff1a;不同目标可能在同一位置。 现在有一种新型的激光炸弹&#xff0c;可以摧毁一个包含 …

Java中常用API总结(4)—— Object类(含实例解读和源码阅读)

Object类一、前言二、概述1.API帮助文档2.使用方法三、常用方法1.toString方法1️⃣格式2️⃣实例3️⃣源码阅读4️⃣快捷键重写方法2.equals方法1️⃣格式2️⃣实例3️⃣源码阅读4️⃣重写方法3.对象克隆四、结语一、前言 本文将讲述有关于Object类相关知识点 二、概述 1.A…

C语言文件操作的细节

目录 文本文件和二进制文件 概念 一个数据在内存中是怎么存储的呢&#xff1f; 通过VS2013可以查看二进制数值 文件读取结束的判定 文件缓冲区 文本文件和二进制文件 概念 根据数据的组织形式&#xff0c;数据文件被称为文本文件或者二进制文件。 数据在内存中以二进制的…

YOLOv5 以txt 或json格式输出预测结果

YOLOv5 以txt 或json格式输出预测结果1.YOLOv5源码以多种格式输出预测结果1.run函数——传入参数2.run函数——保存打印2.YOLOv5以.txt格式输出预测结果1.执行以下代码就可以得到以.txt格式输出预测结果2.输出格式&#xff1a;3.YOLOv5以.json格式输出预测结果1.需要在源码中加…

零售行业交易数据分析(3)——群组/同期群分析(留存率分析)

内容简介 本文介绍了群组分析&#xff08;同期群分析&#xff09;的方法以及Python实现过程&#xff0c;并继续对一家零售公司的交易数据进行用户留存分析和可视化。 本系列的文章&#xff1a; 《零售行业交易数据分析&#xff08;1&#xff09;——客户终身价值(CLTV)计算和…

Qt扫盲-QSplitter理论总结

QSplitter理论总结一、概述二、使用说明1. 添加子控件2. 内部控件大小和位置一、概述 QSplitter允许用户通过拖动子部件之间的边界来控制子部件的大小。这个经常在我们使用的一些工具软件中最常使用 比如就像 QAssistant 里面的索引栏和内容直间&#xff0c;鼠标放在那个分界区…

3dMax中的两足动物及动画制作方法

3dMax的两足动物简介 3DMax是一款专业的3D电脑设计软件&#xff0c;用于制作3D动画、游戏、模型、图像等&#xff0c;在视频游戏开发商、影视工作室的工作中发挥着重要作用。Biped 是3D max 软件中动画的基本部分。3dMax中的Biped为角色建模中的角色部分提供运动并将其连接到现…