leetcode-09-[232]用栈实现队列[225]用队列实现栈[20]有效的括号[1047]删除字符串中的所有相邻重复项

本文主要是介绍leetcode-09-[232]用栈实现队列[225]用队列实现栈[20]有效的括号[1047]删除字符串中的所有相邻重复项,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

重点:
栈和队列
Java中
栈不建议用stack来实现
建议用 ArrayDeque和Linkedlist来实现
队列建议用ArrayDeque和Linkedlist来实现
两者效率比较:
java - Why is ArrayDeque better than LinkedList - Stack Overflow
基于Linkedlist是链表等,除了删除操作,ArrayDeque的其他效率都比Linkedlist好
一、[232]用栈实现队列
重点:在构造器内初始化
class MyQueue {Stack<Integer> stackIn;Stack<Integer> stackOut;public MyQueue() {stackIn=new Stack<>();stackOut=new Stack<>();}public void push(int x) {stackIn.push(x);}public int pop() {if(!stackOut.isEmpty()){return stackOut.pop();}while(!stackIn.isEmpty()){stackOut.push(stackIn.pop());}return stackOut.pop();}public int peek() {if(!stackOut.isEmpty()){return stackOut.peek();}while(!stackIn.isEmpty()){stackOut.push(stackIn.pop());}return stackOut.peek();}public boolean empty() {if(stackIn.isEmpty()&&stackOut.isEmpty()){return true;}else{return false;}}
}

二、[225]用队列实现栈
重点:queue2 为辅助队列,只做中转用
class MyStack {LinkedList<Integer> queue1;LinkedList<Integer> queue2;public MyStack() {queue1=new LinkedList<>();//辅助队列queue2=new LinkedList<>();}public void push(int x) {queue2.offer(x);while(!queue1.isEmpty()){queue2.offer(queue1.pop());}//队列交换--注意一下!!!LinkedList<Integer> tmp=queue1;queue1=queue2;queue2=tmp;}public int pop() {return queue1.pop();}public int top() {return queue1.peek();}public boolean empty() {return queue1.isEmpty();}
}
三、[20]有效的括号
class Solution {public boolean isValid(String s) {Stack<String> stack=new Stack<>();for(int i=0;i<s.length();i++){if("(".equals(String.valueOf(s.charAt(i)))){stack.push(")");} else if ("{".equals(String.valueOf(s.charAt(i)))) {stack.push("}");} else if ("[".equals(String.valueOf(s.charAt(i)))) {stack.push("]");} else if (!stack.isEmpty()&&stack.peek().equals(String.valueOf(s.charAt(i)))) {stack.pop();}else {return false;}}//栈为空则符合条件return stack.isEmpty();}
}

四、[1047]删除字符串中的所有相邻重复项
重点:
反转栈中的字符串
方法一:
String str = "";
while (!deque.isEmpty()) {
str = deque.pop() + str;
}
方法二:
StringBuilder stringBuilder=new StringBuilder();
while(!stack.isEmpty()){
stringBuilder.append(stack.pop());
}
stringBuilder.reverse().toString();

class Solution {public String removeDuplicates(String s) {LinkedList<Character> stack=new LinkedList<>();char ch;for(int i=0;i<s.length();i++){ch=s.charAt(i);if(!stack.isEmpty()&&stack.peek()==ch){stack.pop();}else{stack.push(ch);}}StringBuilder stringBuilder=new StringBuilder();while(!stack.isEmpty()){stringBuilder.append(stack.pop());}/*** 这种做法很巧妙String str = "";while (!deque.isEmpty()) {str = deque.pop() + str;}*/return stringBuilder.reverse().toString();}
}

这篇关于leetcode-09-[232]用栈实现队列[225]用队列实现栈[20]有效的括号[1047]删除字符串中的所有相邻重复项的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1063750

相关文章

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景