当前位置: 首页 > news >正文

代码随想录算法训练营DAY11 | 栈与队列 (2)

一、LeetCode 20 有效的括号

题目链接:20.有效的括号icon-default.png?t=N7T8https://leetcode.cn/problems/valid-parentheses/

思路:遇到左括号直接进栈;遇到右括号判断站顶是否有匹配的括号,没有就返回flase,有就将栈顶元素出栈;最后检测栈内是否有元素,栈空则说明匹配成功。

class Solution {public boolean isValid(String s) {Stack<Character> stack = new Stack<>();for(int i = 0; i < s.length(); i++){char c = s.charAt(i);if(c == '(' || c == '{' || c == '['){stack.push(c);continue;}else{if(stack.empty()){return false;}  }if(c == ')'){if(stack.peek() == '('){stack.pop();}else{return false;}}else if(c == ']'){if(stack.peek() == '['){stack.pop();}else{return false;}}else if(c == '}'){if(stack.peek() == '{'){stack.pop();}else{return false;}}} return stack.empty();}
}

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

题目链接:1047.删除字符串中的所有相邻重复项icon-default.png?t=N7T8https://leetcode.cn/problems/remove-all-adjacent-duplicates-in-string/

思路:遍历字符串,当前元素与栈顶元素相同时,栈顶元素出栈;当前元素与栈顶元素不同或栈空时,元素入栈;最后将栈中元素逆序输出(本文使用StringBuilder类中的insert()方法)。

 

class Solution {public String removeDuplicates(String s) {Stack<Character> stack = new Stack<>();for(int i = 0; i < s.length(); i++){char c = s.charAt(i);if(stack.empty()){stack.push(c);}else{if(stack.peek() == c){stack.pop();}else{stack.push(c);}}}StringBuilder sb = new StringBuilder();while(!stack.empty()){sb.insert(0,stack.pop());}return sb.toString();}
}

三、LeetCode 150 逆波兰表达式求值

题目链接:150.逆波兰表达式求值icon-default.png?t=N7T8https://leetcode.cn/problems/evaluate-reverse-polish-notation/

思路:设置数字栈num_stack;遍历字符串数组,遇到数字时直接入栈;遇到符号时出栈两次,记为num1、num2,判断符号类型后进行对应操作得到结果res并压入栈中;最后返回栈内结果即为所求。

class Solution {public int evalRPN(String[] tokens) {//设置数字栈Stack<Integer> num_stack = new Stack<>();for(int i = 0; i < tokens.length; i++){int flag = judge(tokens[i]);if(flag == 0){//数字,直接入栈num_stack.push(Integer.valueOf(tokens[i]));}else{//符号,判断是什么符号,进行对应操作,得出的结果入栈int num1 = num_stack.pop();int num2 = num_stack.pop();int res = 0;if(tokens[i].equals("+")){res = num1 + num2;}else if(tokens[i].equals("-")){res = num2 - num1;}else if(tokens[i].equals("*")){res = num1 * num2;}else{res = num2 / num1;}num_stack.push(res);}}return num_stack.pop();}//judge函数用来判断字符串是数字public int judge(String s){if( s.equals("*") || s.equals("/") || s.equals("+") || s.equals("-")){return 1;}//数字,返回0return 0;}
}

四、今日小结

        提前完成算法学习任务,雪很大,出去溜达了一下,晚上也要努力学习呀~

http://www.lryc.cn/news/293220.html

相关文章:

  • 【Spring实战】33 Spring Boot3 集成 Nacos 配置中心
  • ElementUI安装与使用指南
  • Opencv——图片卷积
  • 项目安全-----加密算法实现
  • 只用一台服务器部署上线(宝塔面板) 前后端+数据库
  • 《Pandas 简易速速上手小册》第8章:Pandas 高级数据分析技巧(2024 最新版)
  • 计算机网络_1.6.2 计算机网络体系结构分层的必要性
  • 跟着cherno手搓游戏引擎【18】抽象Shader、项目小修改
  • 每日OJ题_算法_模拟②_力扣495. 提莫攻击
  • freertos 源码分析二 list链表源码
  • Peter算法小课堂—Dijkstra最短路算法
  • Python 读取和写入包含中文的csv、xlsx、json文件
  • 【算法】利用递归dfs解决二叉树算法题(C++)
  • 计算机网络_1.6.1 常见的三种计算机网络体系结构
  • XML传参方式
  • Pyecharts炫酷散点图构建指南【第50篇—python:炫酷散点图】
  • 关于爬取所有哔哩哔哩、任意图片、所有音乐、的python脚本语言-Edge浏览器插件 全是干货!
  • 压力测试工具-Jmeter使用总结
  • [cmake]CMake Error: Could not create named generator Visual Studio 16 2019解决方法
  • 2024美赛数学建模D题思路分析 - 大湖区水资源问题
  • 2024 高级前端面试题之 HTTP模块 「精选篇」
  • 【Linux C | 网络编程】netstat 命令图文详解 | 查看网络连接、查看路由表、查看统计数据
  • Python爬虫存储库安装
  • 用函数求最小公倍数和最大公约数(c++题解)
  • 鲜花销售|鲜花销售小程序|基于微信小程序的鲜花销售系统设计与实现(源码+数据库+文档)
  • 三.Linux权限管控 1-5.Linux的root用户用户和用户组查看权限控制信息chmod命令chown命令
  • Jmeter学习系列之四:测试计划元素介绍
  • LeetCode.1686. 石子游戏 VI
  • 【硬件产品经理】锂电池充电时间怎么计算?
  • Oracle篇—普通表迁移到分区表(第五篇,总共五篇)