【代码题】栈的应用

news/2024/10/30 9:33:37/

目录

1.有效的括号

2.逆波兰表达式求值


1.有效的括号

点击进入该题 icon-default.png?t=MBR7https://leetcode.cn/problems/valid-parentheses/description/

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

有效字符串需满足:

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

        题解: 

 思路:

  1. 若字符串长度是0或1都不可能是合法括号,直接返回false;
  2. 字符串修改成字符,对字符一个一个判断,若字符是左括号,就把他放入栈中,若字符是右括号,就在栈顶出一个元素,两个元素合并一起,判断看是否是有效括号。
class Solution {public boolean isValid(String s) {//一个或者是空,都是falseif(s.length()==1||s.length()==0) {return false;}Stack<Character> Stack1=new Stack<>();//判断是左括号还是右括号for(int i=0;i<s.length();i++) {char ch=s.charAt(i);if(s.charAt(i)=='{'||s.charAt(i)=='('||s.charAt(i)=='[') {Stack1.push(s.charAt(i));}if(s.charAt(i)=='}'||s.charAt(i)==')'||s.charAt(i)==']') {StringBuffer sb=new StringBuffer();//拿之前看栈是否为空if(Stack1.empty()) {return false;}sb.append(Stack1.pop());sb.append(ch);String str=sb.toString();//判断左右括号是否匹配if(str.equals("{}")||str.equals("[]")||str.equals("()")) {continue;}else {return false;}}}//判断栈是否出完if(!Stack1.empty()) {return false;}return true;}
}

2.逆波兰表达式求值

点击进入该题icon-default.png?t=MBR7https://leetcode.cn/problems/evaluate-reverse-polish-notation/

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

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

注意:

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

        题解: 

思路:

  1. 遇见数字就入栈;
  2. 遇见运算符就出栈,出两个数,再将运算后的结果入栈;
  3. 最终栈中的元素就是计算结果。 

class Solution {public int evalRPN(String[] tokens) {Stack<Integer>Stack=new Stack<>();for(int i=0;i<tokens.length;i++) {//判断是否是运算符号if(!tokens[i].equals("+")&&!tokens[i].equals("-")&&!tokens[i].equals("*")&&!tokens[i].equals("/")) {Stack.push(Integer.parseInt(tokens[i]));}else {int num2=Stack.pop();int num1=Stack.pop();switch (tokens[i]) {case "/":Stack.push(num1/num2);break;case "+":Stack.push(num1+num2);break;case "-":Stack.push(num1-num2);break;case "*":Stack.push(num1*num2);break;}}}return Stack.pop();}
}

http://www.ppmy.cn/news/9818.html

相关文章

Node.js 中 session验证登录

在前一篇内容中讲到这个cookie实现验证登录&#xff0c;cookie是存储在客户端的&#xff0c;而session是存储在服务器的&#xff0c;相比较session的安全性会更高&#xff0c;session对象存储特定用户会话所需要的属性以及配置信息&#xff0c;服务通过session对象将用户的信息…

C语言机票销售系统[2023-01-04]

C语言机票销售系统[2023-01-04] 机票销售系统 一 系统要求&#xff1a; 要求用C 语言实现一个模拟机票销售的系统&#xff0c;基本功能如下&#xff1a; &#xff08;1&#xff09;、通过该系统&#xff0c;超级用户可以添加用户&#xff08;包括业务员角色和乘客角色&#xf…

中国电信分布式物联网操作系统CTWing OS 2.0发布!

近日&#xff0c;2022天翼数字科技生态大会云上隆重开幕&#xff0c;由中国电信天翼物联自主研发的分布式物联网操作系统CTWing OS 2.0最新成果正式发布。CTWing OS 2.0在体系架构、系统功能、系统性能、稳定保障、安全可信、行业赋能六大要素上实现全面提升&#xff0c;全方位…

rabbitmq+netcore6 【3】Publish/Subscribe:发布/订阅

文章目录1&#xff09;前言2&#xff09;临时队列3&#xff09;绑定4&#xff09;综合以上代码准备工作1、生产者2、消费者13、消费者25&#xff09;验证官网教程原文链接&#xff1a; https://www.rabbitmq.com/tutorials/tutorial-three-dotnet.html翻译版参考链接&#xff1…

SpringBoot解决全局和局部跨域问题的两种方式

前言 在如今前后端分离的开发模式下&#xff0c;跨域是一个非常经典的问题&#xff0c;解决的方式也有很多&#xff0c;比如代理服务器&#xff0c;使用JSONP 我之前也写过一篇解决跨域问题的文章&#xff0c;感兴趣的可以参考&#xff1a;解决Vue前后端跨域问题的多种方式 …

YOLOv5 CPU实时的实例分割教程-它来了!

一个不知名大学生&#xff0c;江湖人称菜狗original author: jacky LiEmail : 3435673055qq.comTime of completion&#xff1a;2023.1.6Last edited: 2023.1.6YOLOv5 CPU实时的实例分割教程-它来了&#xff01;简介前不久&#xff0c;ultralytics发布了一个yolov5 7.0版本&…

小程序 超长页面截图保存web-view+html2canvas

web-view文档建议参考----支付宝提供的文档&#xff0c;html2canvas官方文档&#xff08;官网可以下载html2canvas.js 和 html2canvas.min.js&#xff09;。由于篇幅受限&#xff0c;这里就贴了一下用法&#xff0c;对于web-view的配置情况&#xff0c;需要自己去查看文档&…

acwing111-畜栏预定

算法分类&#xff1a; 区间分组的应用 贪心 问题描述 有 N 头牛在畜栏中吃草。 每个畜栏在同一时间段只能提供给一头牛吃草&#xff0c;所以可能会需要多个畜栏。 给定 N 头牛和每头牛开始吃草的时间 A 以及结束吃草的时间 B&#xff0c;每头牛在 [A,B]这一时间段内都会一直…