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

20.有效的括号

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

有效字符串需满足:

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

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

题目链接:20. 有效的括号

卡哥的视频链接:栈的拿手好戏!| LeetCode:20. 有效的括号

题目思考:无论有多少种排列,对不上的情况也就是三种:左括号富余,右括号富余,括号匹配不上,至于做法,我们应该在遇到左括号的时候,往里面添上相应的右括号,当遇到右括号的时候删除栈里相应的右括号,最后如果栈内元素为零,说明符号是顺序相同而且相互匹配的栈先进后出的

可以用两种方法:双端队列和map

什么是双端队列呢?

双端队列(Deque,全称 Double-Ended Queue)是一种具有队列和栈的特性的数据结构。它允许在队列的两端进行插入和删除操作,因此可以像队列一样从一端插入元素(尾部),从另一端删除元素(头部),也可以像栈一样从一端插入和删除元素(顶部)。双端队列支持以下操作:

  1. 在队列的前端(头部)插入元素
  2. 在队列的后端(尾部)插入元素
  3. 在队列的前端(头部)删除元素
  4. 在队列的后端(尾部)删除元素
  5. 获取队列的第一个元素(但不删除)
  6. 获取队列的最后一个元素(但不删除)
  7. 判断队列是否为空
  8. 获取队列的大小

双端队列可以通过多种方式实现,例如使用数组、链表或双向链表等数据结构。在 Java 中,Deque 接口提供了双端队列的定义,常见的实现类包括 LinkedListArrayDeque

代码示例:

import java.util.Deque;
import java.util.LinkedList;
public class kuohaomatch {
    public boolean isValid(String s){
        // 创建一个双端队列,用于模拟栈的行为,存储括号字符
        Deque<Character> deque = new LinkedList<>();
        char ch;
        // 遍历输入字符串中的每个字符
        for (int i = 0; i < s.length(); i++) {
            ch = s.charAt(i);
            // 如果当前字符是左括号,则将对应的右括号入栈
            if(ch == '('){
                deque.push(')');
            } else if (ch == '{') {
                deque.push('}');
            } else if (ch == '[') {
                deque.push(']');
            } else if(deque.isEmpty() || deque.peek() != ch){
// 如果当前字符是右括号,并且栈为空(没有相应的左括号),或者栈顶的括号与当前字符不匹配,则返回 false
                return false;
            }else{
                // 如果当前字符是右括号,并且与栈顶的括号匹配,则将栈顶的括号出栈
                deque.pop();
            }
        }
// 最后,检查栈是否为空,如果为空,则所有的左括号都有相应的右括号与之匹配,返回 true;否则,返回 false
        return deque.isEmpty();
    }
}

代码逻辑详解:

  1. 声明了一个名为 kuohaomatch 的类,并在其中定义了一个名为 isValid 的公共方法,该方法接受一个字符串参数 s,并返回一个布尔值,指示该字符串中的括号是否有效。

  2. 在方法内部,创建了一个 Deque 类型的双端队列 deque,用于存储括号字符。

  3. 使用一个 for 循环遍历输入字符串 s 中的每个字符。

  4. 对于每个字符,检查它是否是左括号,如果是,则将相应的右括号入栈;如果不是左括号,则继续判断。

  5. 如果当前字符是右括号,并且栈为空(没有相应的左括号),或者栈顶的括号与当前字符不匹配,则返回 false,因为这意味着字符串中的括号无效。

  6. 如果当前字符是右括号,并且与栈顶的括号匹配,则将栈顶的括号出栈。

  7. 循环结束后,检查栈是否为空。如果栈为空,表示所有的左括号都有相应的右括号与之匹配,返回 true;否则,返回 false,因为仍然有未匹配的括号。

leetcode提交记录:

小tips:1.注意生命双端队列的类型
2.注意各种括号的判断要写在for循环内部
3.注意方法后的括号

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

题目:给出由小写字母组成的字符串 S重复项删除操作会选择两个相邻且相同的字母,并删除它们。

在 S 上反复执行重复项删除操作,直到无法继续删除。

在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

示例:

输入:"abbaca"
输出:"ca"
解释:
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。

提示:

  1. 1 <= S.length <= 20000
  2. S 仅由小写英文字母组成。

题目链接:1047. 删除字符串中的所有相邻重复项

卡哥的视频链接:栈的好戏还要继续!| LeetCode:1047. 删除字符串中的所有相邻重复项

题目思路:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

B站美化插件,支持自定义,太酷辣~

大公司的软件和网站通常具有优雅的默认界面设计。 以国内二次元聚集地B站为例&#xff0c;可以说它的UI设计非常吸引人。与其他视频网站繁复的设计相比&#xff0c;B站的界面设计可以说是遥遥领先 然而&#xff0c;总有些人对默认的用户界面感到不满意&#xff0c;他们渴望尝试…

数字逻辑电路基础-有限状态机

文章目录 一、有限状态机基本结构二、verilog写一个基础有限状态机(moore型状态机)三、完整代码一、有限状态机基本结构 本文主要介绍使用verilog编写有限状态机FSM(finite state machine),它主要由三部分组成,下一状态逻辑电路,当前状态时序逻辑电路和输出逻辑电路。 有…

Spring Security认证流程分析

我自己的思路 先分别实现 userdetailsService&#xff0c;userDetails&#xff0c;passwordEncoder三个接口&#xff0c; 然后就是写登录逻辑 本文章用的是继承UsernamePasswordAuthenticationFilter这个接口 因为这个框架默认登录逻辑是在这里面的&#xff0c;里面的核心就是…

【Vue3+Tres 三维开发】01-HelloWord

预览 什么是TRESJS 简单的说,就是基于THREEJS封装的能在vue3中使用的一个组件,可以像使用组件的方式去创建场景和模型。优势就是可以快速创建场景和要素的添加,并且能很明确知道创景中的要素构成和结构。 项目创建 npx create-vite@latest # 选择 vue typescript安装依赖…

广西民族师范学院领导一行莅临泰迪智能科技开展“访企拓岗”活动

4月25日&#xff0c;广西民族师范学院数理与电子信息工程学院党委副书记、纪委书记主战河&#xff0c;数理与电子信息工程学院副院长陆克盛、专任教师韦吉栋、黎运宇、黄恒秋、王贵富莅临广东泰迪智能科技股份有限公司就深入实施“访企拓岗”、强化校企合作、促进毕业生充分就业…

搞定Microchip MPU的U-boot源码仿真调试

文章目录 准备工作编译at91bootstrap和U-boot源码下载并编译at91bootstrap源码下载并编译u-boot源码 使用Eclipse导入U-boot源码并进行配置cfg配置文件内容仿真调试视频教程 在嵌入式Linux开发中&#xff0c;免不了接触到U-boot&#xff0c;随着U-boot功能越来越强大&#xff0…

2024年4月26日力扣每日一题(1146)

2024年4月26日力扣每日一题&#xff08;1146&#xff09; 前言 ​ 这道题在做的时候感觉很简单&#xff0c;题意很容易理解&#xff0c;但直接去做直接干爆内存&#xff0c;参考了一下灵神的代码&#xff0c;豁然开朗&#xff0c;觉得这道题很有意思&#xff0c;便想着写篇博…

【YOLO改进】换遍IoU损失函数之GIoU Loss(基于MMYOLO)

GIoU损失函数 论文链接:https://arxiv.org/pdf/1902.09630 GIoU&#xff08;Generalized Intersection over Union&#xff09;损失函数是一种用于改善目标检测模型中边界框回归的方法。它是基于传统的IoU&#xff08;交并比&#xff09;损失的一个改进版本&#xff0c;解决了…

node.js的安装与配置

Node.js 是一种基于 JavaScript 编程语言的服务器端平台&#xff0c;它可以让你在浏览器之外运行 JavaScript 代码。以下是 Node.js 的安装步骤&#xff1a; 下载 Node.js&#xff1a; 访问 Node.js官网。根据你的操作系统选择合适的版本下载。 运行安装文件&#xff1a; 在下载…

计算机视觉——使用OpenCV GrabCut算法从图像中移除背景

GrabCut算法 GrabCut算法是一种用于图像前景提取的技术&#xff0c;由Carsten Rother、Vladimir Kolmogorov和Andrew Blake三位来自英国剑桥微软研究院的研究人员共同开发。该技术的核心目标是在用户进行最少交互操作的情况下&#xff0c;自动从图像中分割出前景对象。 在Gra…

直流有刷电机入门

文章目录 123455.25.3 1 2 电刷 材质是 石墨 3 130马达 就几毛钱 几块钱这学的就是减速电机P MAX一定 pf*v 降低速度 扭矩就会大 4 还有空载电流 过大负载 时 有堵转电流 &#xff08;可分析电流 来看电机工作状态&#xff09;RPM 转每分钟 5 5.2 这的线圈 是简化后的转子绕组…

Ubuntu终端常用指令

cat cat 读取文件的内容 1、ls 一、 1、ll 显示当前目录下文件的详细信息,包括读写权限,文件大小,文件生成日期等(若想按照更改的时间先后排序,则需加-t参数,按时间降序(最新修改的时间排在最前)执行: $ ll -t, 按时间升序执行: $ ll -t | tac): ll 2、查看当前所处路径(完整…

服务器数据恢复—服务器重装系统导致XFS分区丢失的数据恢复案例

服务器数据恢复环境&#xff1a; 一台服务器MD1200磁盘柜&#xff0c;通过raid卡将15块磁盘组建成一组raid5磁盘阵列。raid5阵列分配了2个lun&#xff0c;操作系统层面对lun进行分区&#xff1a;1个分区采用LVM扩容方式加入到了root_lv中&#xff0c;其余分区格式化为XFS文件系…

大数据时代,保护个人隐私小Tips Get 起来!

随着大数据时代的到来&#xff0c;我们的隐私正处于越来越易被侵犯的风险中。在各种社交媒体和信息共享平台上&#xff0c;我们需要输入各种个人信息&#xff0c;而这些信息可能被不法分子盗取&#xff0c;甚至被用来进行欺诈行为。在如今的大数据时代&#xff0c;保护个人隐私…

元宇宙中的DAPP:你了解多少?

元宇宙是什么&#xff1f;这是一个在当今科技圈炙手可热的话题。而在元宇宙中&#xff0c;DAPP起着至关重要的角色&#xff0c;它作为连接现实世界与虚拟世界的桥梁&#xff0c;为未来的数字世界开启了一个全新的篇章。 一、元宇宙&#xff1a;一个虚拟的数字世界 元宇宙是一…

【JavaWeb】Day51.Mybatis动态SQL(一)

什么是动态SQL 在页面原型中&#xff0c;列表上方的条件是动态的&#xff0c;是可以不传递的&#xff0c;也可以只传递其中的1个或者2个或者全部。 而在我们刚才编写的SQL语句中&#xff0c;我们会看到&#xff0c;我们将三个条件直接写死了。 如果页面只传递了参数姓名name 字…

【麒麟(Linux)系统远程连接到windows系统并进行文件传输】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言使用步骤总结 前言 一般来说&#xff0c;windows自带远程桌面&#xff0c;使用的RDP协议&#xff0c;Linux上支持RDP协议的软件很多&#xff0c;常用的是Remmi…

Java 网络编程之TCP(五):分析服务端注册OP_WRITE写数据的各种场景(二)

接上文 二、注册OP_WRITE写数据 服务端代码&#xff1a; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectableChannel; import java.nio.channels.SelectionKey; import java.nio.channels.S…

【cf】Codeforces Round 941(Div.2)题解 A - D

前三题出的最快的一次&#xff0c;但是d没出 A. Card Exchange 只要有一种颜色大于等于 k&#xff0c;那就是 k-1&#xff0c;否则就是 n #include <bits/stdc.h>using namespace std;#define int long long using i64 long long;typedef pair<int, int> PII;…

CONSOB 又下令封锁5个未经授权的投资网站,总数达1065

FX110讯&#xff1a;意大利金融市场监管局 CONSOB 已下令关闭 5 个非法提供金融服务/金融产品的网站。自2019年7月CONSOB有权下令封锁欺诈性金融网站以来&#xff0c;被封禁的网站数量已升至1065个。 以下是 CONSOB 下令新屏蔽的 5个网站&#xff1a; “Luno Invest” Vantage …
最新文章