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

LeetCode 20 有效的括号

在这里插入图片描述

本题思路:利用栈来完成,如果遇到左括号类型就放入栈,如果遇到右括号类型,就弹出栈顶的元素和该元素进行匹配,如果不匹配就返回 false。

注意点:

  1. 第一个就是右括号类型,那么肯定是不匹配的,此时只需要判断栈元素是否为空,如果为空,直接返回 false;
  2. 只有一个左括号类型, 如果已经遍历到末尾,那么判断栈是否为空,如果为空则返回 true, 不空则返回 false
    public boolean isValid(String s) {Stack<Character> stack = new Stack();char[] c = s.toCharArray();int i = 0;for (i = 0; i < c.length; i++) {if (c[i] == '(' || c[i] == '{' || c[i] == '[') {stack.push(c[i]);} else {// 栈不为空,才能匹配if (!stack.isEmpty()) {char pop = stack.pop();if (c[i] == ')' && pop == '(') {} else if (c[i] == '}' && pop == '{') {} else if (c[i] == ']' && pop == '[') {} else { // 如果不匹配return false;}} else { // 栈为空,不匹配return false;}}}if(stack.isEmpty()){return true;}return false;}

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

在这里插入图片描述

本题思路: 利用一个栈来完成, 分为两步

  • 再进入栈之前先判断是否为空,如果空的情况下直接就进栈
  • 如果不为空,则判断当前元素和栈顶元素是否一样,如果一样,就弹出栈顶元素

为了方便理解,画一幅图来讲解一下示例

  • 初始状态下,栈为空在这里插入图片描述
  • 根据上图,我们直接入栈即可在这里插入图片描述
  • 根据上图,此时栈不为空,b也不等于a,所以直接入栈在这里插入图片描述
  • 根据上图,此时不为空,但是b等于栈顶元素,所以弹出b在这里插入图片描述
  • 根据上图,此时栈不为空,但是a等于栈顶元素a,所以弹出a在这里插入图片描述
  • 根据上图,此时栈为空,直接入c即可在这里插入图片描述
  • 根据上图,此时栈不为空,并且a不等于c,直接入栈在这里插入图片描述
  • 最后返回所剩下的元素就是字符串,需要倒置一下顺序即可
class Solution {public String removeDuplicates(String s) {char[] array = s.toCharArray();Stack<Character> stack = new Stack();for(int i = 0; i < array.length; i++){// 栈为空直接入if(stack.isEmpty()){stack.push(array[i]);}else{ // 栈不为空的情况下,char pop = stack.peek();// 入栈前先判断栈顶元素是否和要入栈元素相同,如果相同就弹出栈顶元素if(array[i] == pop){stack.pop();}else{stack.push(array[i]);}}}char[] tmp = new char[stack.size()];for(int i = tmp.length - 1; i >= 0 ; i--){tmp[i] = stack.pop();}return new String(tmp);}
}

LeetCode 150 逆波兰表达式求值

在这里插入图片描述

本题思路: 利用栈来完成

  • 遇到数字就放入栈中
  • 遇到符号,就弹出两位进行计算后,又放入栈中
  • 最终剩下的一个元素就是就结果,弹出即可
class Solution {
public static int evalRPN(String[] tokens) {Stack<Integer> stack = new Stack();for (int i = 0; i < tokens.length; i++) {if (isNumber(tokens[i])) {stack.push(Integer.parseInt(tokens[i]));} else { //                int a = stack.pop();int b = stack.pop();if (tokens[i].equals("+")) {stack.push(a+b);} else if (tokens[i].equals("-")) {stack.push(b-a);} else if (tokens[i].equals("*") ) {stack.push(b*a);} else {stack.push(b/a);}}}int ans =stack.pop();return ans;}public static boolean isNumber(String token) {return !("+".equals(token) || "-".equals(token) || "*".equals(token) || "/".equals(token));}
}

注意点: 字符串比较一定要用 equals 来进行,不然就会出现错误异常!!

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

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

相关文章

Qt Designer 常见需求

窗口 参考链接 【转载】Qt Designer 使用全攻略_qtdesigner使用-CSDN博客 QT屏幕自适应自动布局&#xff0c;拖动窗口自动变大变小&#xff08;一&#xff09;_qt布局随窗口大小变化-CSDN博客 pyqt5设置高分辨率以及icon显示模糊解决办法_python qt图显示不清晰-CSDN博客 窗…

算法基础之最长公共子序列

最长公共子序列 核心思想&#xff1a; 线性dp 集合定义 : f[i][j]存 a[1 ~ i] 和 b[1 ~ j] 的最长公共子序列长度 状态计算&#xff1a; 分为取/不取a[i]/b[j] 共四种情况 其中 中间两种会包含两个都不取的情况(去掉) 但是因为取最大值 有重复也没事用f[i-1][j] 和 f[i][j-1]表…

希尔排序详解(C语言)

前言 希尔排序是一种基于插入排序的快速排序算法。所以如果还会插入排序的小伙伴可以点击链接学习一下插入排序&#xff08;点我点我&#xff01;&#xff09; &#xff0c;相较于插入排序&#xff0c;希尔排序拥有更高的效率&#xff0c;小伙伴们肯定已经迫不及待学习了吧&…

使用防火墙是否可以应对DDoS攻击?

很多游戏行业公司对网络安全不够了解&#xff0c;觉得装个防火墙就可以万事大吉了。实际上使用防火墙确实是解决DDoS攻击问题的一种有效方法&#xff0c;一些更先进的防火墙还可以采用其他防御措施&#xff0c;例如:深度包检测、行为分析、人工智能等&#xff0c;来识别和防御各…

MyBatis见解4

10.MyBatis的动态SQL 10.5.trim标签 trim标签可以代替where标签、set标签 mapper //修改public void updateByUser2(User user);<update id"updateByUser2" parameterType"User">update user<!-- 增加SET前缀&#xff0c;忽略&#xff0c;后缀…

IPC发布IPC-6012F《刚性印制板鉴定和性能规范》

IPC发布IPC-6012F《刚性印制板鉴定和性能规范》 变革解决了刚性印刷板制造工艺的进步 2023年10月18日 下载&#xff1a; IPC-6012F 2023 EN,Qualification and Performance Specification for Rigid Printed Boards.pdf_免费高速下载|百度网盘-分享无限制 文件分享https:/…

基于SpringBoot留守儿童爱心成长守护平台

1 引言 互联网技术的大面积普及使得网络平台成为人们获取信息的主要途径。网络时代的留守儿童们的生活自然与互联网息息相关&#xff0c;因此必然需要符合网络时代特征的新方式来对留守儿童提供帮助[1]。留守儿童平台作为向大众传递信息的一种方式&#xff0c;使得更多人能看到…

基于ssm小区物业管理系统论文

摘 要 如今的时代&#xff0c;是有史以来最好的时代&#xff0c;随着计算机的发展到现在的移动终端的发展&#xff0c;国内目前信息技术已经在世界上遥遥领先&#xff0c;让人们感觉到处于信息大爆炸的社会。信息时代的信息处理肯定不能用之前的手工处理这样的解决方法&#x…

MySQL的安装for windows

一、MySQL的安装for windows 1、安装包的下载2、安装配置3、初始化MySQL数据库4、配置环境变量5、安装Navicat 1、安装包的下载 点击此链接可跳转到对应下载地址https://downloads.mysql.com/archives/community/进入后选择所需版本开始下载&#xff0c;如下图所示&#xff1a…

Spring系列学习二、Spring框架的环境配置

Spring框架的环境配置 一、Java环境配置二、 Spring框架的安装与配置三、Maven与Gradle环境的配置四、IDE环境配置&#xff08;Eclipse与IntelliJ IDEA&#xff09;五、结语 一、Java环境配置 所有编程旅程总是得从基础开始&#xff0c;如同乐高积木大作的基座&#xff0c;首先…

计算机毕业设计------SSM水果蔬菜商城批发网站

项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,管理员管理,网站用户管理,新闻公告管理,果蔬类型管理,城市信息管理,配货点管理,果蔬商品管理,果蔬订单管理,果蔬评价管理…

互联科技:全域托管云赋能百行百业的数字化转型

在这个数字经济时代&#xff0c;云计算技术为企业提供了更加高效的业务管理机会&#xff0c;百行百业加速上云。对比几种云网方案&#xff0c;目前公有云方案存在可控性低、数据暴露风险、个性化需求难以满足、服务受限等问题&#xff1b;私有云方案存在建设成本高、建设周期长…