Day11:栈与队列part02:20. 有效的括号、1047.删除字符串中所有相邻重复项、150. 逆波兰表达式求值

https://blog.csdn.net/weixin_43303286/article/details/131869968?spm=1001.2014.3001.5501

  1. 有效的括号

遇见左括号对应的右括号进栈,遇到右括号看栈顶,不相同就返回false

class Solution {public boolean isValid(String s) {Stack<Character> stack = new Stack<>();for(char ch : s.toCharArray()){if(ch == '{') {stack.push('}');}else if(ch == '('){stack.push(')');}else if(ch == '['){stack.push(']');}else{if(!stack.empty()){if(stack.peek() != ch){return false;}else{stack.pop();}}else{return false;}}}return stack.empty();}}

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

就是消消乐思想,栈的拿手好戏,可以直接声明stack,也可以用字符串当作栈:

在Java中,Deque(双端队列)通常被用作栈的实现,而不是Stack类,主要有以下几个原因:

Stack类是Java早期版本中的遗留类,它继承自Vector类,而Vector类的所有方法都是同步的,这意味着它在多线程环境下的性能较差。

Deque接口提供了更丰富和一致的接口。例如,Deque提供了addFirst、addLast、removeFirst、removeLast等方法,这使得它既可以作为栈(先进后出)使用,也可以作为队列(先进先出)使用。

Deque接口的实现类,如ArrayDeque,通常比Stack类具有更好的性能。

class Solution {public String removeDuplicates(String s) {Stack<Character> sb = new Stack<>();StringBuilder sb1 = new StringBuilder();for (int i = 0; i < s.length(); i++) {if(sb.isEmpty() || sb.peek()!= s.charAt(i)){sb.push(s.charAt(i));}else{sb.pop();}}while(!sb.empty()){sb1.append(sb.pop());}return sb1.reverse().toString();}
}
  • 翻转字符串:StringBuilder的reverse()
  • 使用Deque的代码:
class Solution {public String removeDuplicates(String S) {//ArrayDeque会比LinkedList在除了删除元素这一点外会快一点//参考:https://stackoverflow.com/questions/6163166/why-is-arraydeque-better-than-linkedlistArrayDeque<Character> deque = new ArrayDeque<>();char ch;for (int i = 0; i < S.length(); i++) {ch = S.charAt(i);if (deque.isEmpty() || deque.peek() != ch) {deque.push(ch);} else {deque.pop();}}String str = "";//剩余的元素即为不重复的元素while (!deque.isEmpty()) {str = deque.pop() + str;}return str;}
}
  • 直接用字符串当栈:
class Solution {public String removeDuplicates(String s) {// 将 res 当做栈// 也可以用 StringBuilder 来修改字符串,速度更快// StringBuilder res = new StringBuilder();StringBuffer res = new StringBuffer();// top为 res 的长度int top = -1;for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);// 当 top > 0,即栈中有字符时,当前字符如果和栈中字符相等,弹出栈顶字符,同时 top--if (top >= 0 && res.charAt(top) == c) {res.deleteCharAt(top);top--;// 否则,将该字符 入栈,同时top++} else {res.append(c);top++;}}return res.toString();}
}

150. 逆波兰表达式求值

注意-和/有顺序要求。

class Solution {public int evalRPN(String[] tokens) {Deque<Integer> nums = new ArrayDeque<>();//用来存数字for(String s: tokens){if(Objects.equals(s, "+")){nums.push(nums.pop() + nums.pop());}else if(Objects.equals(s, "-")){int a = nums.pop();int b = nums.pop();nums.push(b - a);}else if(Objects.equals(s, "*")){nums.push(nums.pop() * nums.pop());}else if(Objects.equals(s, "/")){int a = nums.pop();int b = nums.pop();nums.push(b / a);}else{nums.push(Integer.parseInt(s));}}return nums.peek();}
  • Integer.parseInt(s)字符串转数字

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

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

相关文章

【代码随想录】【回溯算法】补day24:组合问题以及组合的优化

回溯算法&#xff1a;递归函数里面嵌套着for循环 给定两个整数 n 和 k&#xff0c;返回 1 … n 中所有可能的 k 个数的组合。 示例: 输入: n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 包含组合问题和组合问题的剪枝优化 class solution:def combine(se…

C# 第三方曲线库及其特点

在 C# 中&#xff0c;有几个第三方库可以用于绘制曲线图&#xff0c;每个库都有自己的特点和优势。以下是一些常见的 C# 第三方曲线库及其特点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.LiveC…

C++从零开始(day51)——unordered_set,unordered_map学习使用

1.unordered系列关联式容器 C98中&#xff0c;STL提供了底层为红黑树结构的一系列容器&#xff0c;在查找时效率可以达到时间复杂度可以达到O(logN)&#xff0c;即红黑树的高度次&#xff0c;当树中的结点非常多时&#xff0c;查询效率也不理想&#xff0c;因此在C11中&#x…

力扣L10--- 3. 无重复字符的最长子串--2024年3月14日

1.题目 2.知识点 注1&#xff1a;containsKey 是 Java 中 HashMap 类的一个方法&#xff0c;用于检查哈希表中是否包含指定的键。 注2&#xff1a;在哈希表&#xff08;HashMap)中&#xff0c;每个键对应着唯一的值&#xff0c;因此键不能重复&#xff0c;但值可以重复。 (1)创…

ECMAScript标准-默认导出和导入

导出&#xff1a; export default{} const baseURL "http://www.baidu.com" export default{url:baseURL } 导入&#xff1a; import 变量名(自己定义的变量名&#xff0c;全部加载&#xff09; from ‘模块名或路径’ import obj from ./commonjs.js console.…

Java后端面试经验分享,~纯分享

本文将从面试、工作、学习三个方面分享最近面试的一些心得以及以后发展的一些规划&#xff0c;仅供参考&#xff0c;哈哈&#xff0c;毕竟本人也很菜&#xff0c;因为菜才要多学习。一会儿也会分享两本Java面试题库&#xff08;题库是b站大学找的&#xff0c;一会儿我也会分享出…

SpringBoot整合Seata注册到Nacos服务

项目引入pom文件 <!-- SpringCloud Seata 组件--> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-seata</artifactId><version>${alibaba.seata}</version><exclusions><exc…

八股文打卡day34——数据库(11)

面试题&#xff1a;谈一下你对MySQL中锁的了解&#xff1f; 我的回答&#xff1a; 首先&#xff0c;从锁的粒度来分&#xff0c;可以分为&#xff1a; ①全局锁。全局锁主要用于数据库的备份&#xff0c;加上全局锁&#xff0c;意味着整个数据库都处于只读的状态。 ②行级锁。…

初学者必看的python中类型转换

Python中常见的类型转换 int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) 将x转换到一个浮点数 complex(real [,imag ]) 创建一个复数 str(x ) 将对象 x 转换为字符串 repr(x ) 将对象 x 转换为表达式字符串 eval(str ) 用来计算在字符串中…

`sig_atomic_t` 是C语言中的一个数据类型,它通常用于在信号处理程序中声明变量

例子 static volatile sig_atomic_t signal_num; static void SigTerm(int signo) {running 0;signal_num signo; }int main(int argc, char *argv[]) {signal(SIGTERM, SigTerm);signal(SIGINT, SigTerm); }sig_atomic_t 是C语言中的一个数据类型&#xff0c;它通常用于在信…

(57)最富有客户的资产总量

文章目录 1. 每日一言2. 题目3. 解题思路3.1 法一3.2 法二 4. 代码4.1 法一4.2 法二 5. 结语 1. 每日一言 Care and diligence bring luck. 谨慎和勤奋&#xff0c;带来好运气。 2. 题目 题目链接&#xff1a;最富有客户的资产总量 给你一个 m x n 的整数网格 accounts &…

作业字符数组

凯撒密码 凯撒密码&#xff08;Caesar&#xff09;加密时会将明文中的 每个字母 都按照其在字母表中的顺序向后&#xff08;或向前&#xff09;移动固 定数目&#xff08; 循环移动 &#xff09;作为密文。例如&#xff0c;当偏移量是左移 3 的时候&#xff08;解密时的密钥…

python二级备考(3)-综合应用

1 《命运》是著名科幻作家倪匡的作品。这里给出《命运》的一个网络版本文件&#xff0c;文件名为“命运. txt”。 问题1 (5分) :在PY301-1. py文件中修改代码&#xff0c;对“命运. txt”文件进行字符频次统计&#xff0c;输出频次最高的中文字符(不包含标点符号)及其频次&…

SpringBoot Servlet容器启动解析

介绍 容器架构 容器处理请求 容器启动全局流程解析 启动前准备 WebServer创建入口 WebServer创建 Servlet启动 Web容器工厂类加载解析 Web容器个性化配置 属性注入 工厂类初始化 BeanPostProcessor方法实现 定制化流程 面试题 请描述下Servlet容器启动流程&#xff1f;介绍下…

Android什么情况下会出现内存泄漏以及怎么解决?

1.什么情况下会出现内存泄漏? (1)单例模式下为什么会造成内存泄漏? 因为单例的生命周期和应用的生命周期是一致的,如果往单例模式里面传了一个生命周期比较短的对象,比如Activity,就会导致Activity不能释放,导致内存泄漏。我们可以传context.getAppliactionContext,而…

周记-week3-人脸识别

感觉已经到极限了&#xff0c;&#xff0c;看看会不会上天~ 主要任务是人脸识别 Pytorch模型训练-----------数据集加载之ImageFolder之全过程 DataLoader的使用

4.10.CVAT——3D对象标注

文章目录 1. 创建任务2. 3D 任务工作区3.标准 3D 模式 Standard 3D mode4. 用长方体进行注释4.1. 用shapes进行注释4.2. 使用长方体进行跟踪Tracking 使用 3D 注释工具来标记 3D 对象和场景&#xff0c;例如车辆、建筑物、景观等。 1. 创建任务 要创建 3D 任务&#xff0c;您必…

hoverEnabled

hoverEnabled 是在 Qt Quick 中用于控制鼠标悬停事件是否可用的属性。当 hoverEnabled 设置为 true 时&#xff0c;表示该元素可以响应鼠标的悬停事件&#xff1b;设置为 false 时&#xff0c;则表示禁用鼠标悬停事件。 在 Qt Quick 中&#xff0c;鼠标悬停事件指的是当鼠标光…

kubernetes实战(2)

kubectl常用命令 1&#xff0c;创建deployment并启动pod(类似docker run): kubectl run --imagenginx nginx-app --port80 --env"DOMAINcluster" deployment "nginx-app" created 2&#xff0c;根据创建的deployment暴露新服务端口&#xff1a; kubect…

unity3d Animal Controller的Animal组件中General基础部分理解

控制器介绍 动物脚本负责控制动物的所有运动逻辑.它管理所有的动画师和刚体参数,以及所有的状态和模式,动物可以做。 动物控制器 是一个动画框架控制器,根动或到位,为任何生物或人形。它利用刚体与物理世界的互动和动画师的玩动画。 States States 是不互相重叠的动画。例如…