Day21——栈和队列专题 ﹏ヽ暗。殇╰゛Y 2024-04-01 11:53 60阅读 0赞 #### 文章目录 #### * * * 3.有效的括号 * 4.删除字符串中的所有相邻重复项 * 5. 逆波兰表达式求值 -------------------- #### 3.有效的括号 #### **思路**:括号匹配有三种失败的情况: 1. 左括号多余 `({[]}()` 2. 括号未多余,但不匹配 `[()[` 3. 右括号多余 `({[]})))` 我们的代码只要覆盖了这三种不匹配的情况,就不会出问题,可以看出 动手之前分析好题目的重要性。 第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false 第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字符。所以return false 第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false **代码实现:** class Solution { public boolean isValid(String s) { int n = s.length(); if(n % 2 !=0){ return false; } Stack<Character> stk = new Stack<>(); for(int i=0;i<n;i++){ char ch = s.charAt(i); if(ch=='(') stk.push(')'); else if(ch=='[') stk.push(']'); else if(ch=='{') stk.push('}'); else if(stk.empty()||ch!=stk.peek()) return false; else stk.pop(); } return stk.empty(); } } #### 4.删除字符串中的所有相邻重复项 #### **思路:** 用栈来存放,那么栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。然后再去做对应的消除操作 * 当栈为空或者此时的元素和栈顶元素不匹配, 则将当前元素入栈 * 匹配, 则弹出栈顶元素 * 最后通过字符串拼接返回 最后栈内剩余的元素就是答案 **代码实现:** class Solution { public String removeDuplicates(String s) { ArrayDeque<Character> deque = new ArrayDeque<>(); for(int i=0;i<s.length();i++){ char 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; } } #### 5. 逆波兰表达式求值 #### 逆波兰表达式:其实就是二叉树的后续遍历(后缀表达式) 思路:栈模拟 * 遇到数字加入栈 * 遇到操作字符弹出栈顶两个元素,进行对应操作即可 注意:在做减法以及除法时,要注意pop出来的顺序,**先放进的-后放进的,先放进的/后放进的,后pop出来的-先pop出来的,后pop出来的/先pop出来的** class Solution { public int evalRPN(String[] tokens) { ArrayDeque<Integer> deque = new ArrayDeque<>(); for (String s : tokens) { if("+".equals(s)) { deque .push(deque .pop() + deque .pop()); } else if("-".equals(s)) { int temp1 = deque .pop(); int temp2 = deque .pop(); deque .push(temp2-temp1); } else if("*".equals(s)) { deque .push(deque .pop() * deque .pop()); } else if("/".equals(s)){ int temp1 = deque .pop(); int temp2 = deque .pop(); deque .push(temp2 / temp1); }else { deque .push(Integer.valueOf(s)); } } return deque .pop(); } }
相关 Day22——队列和栈专题 文章目录 6.滑动窗口最大值 7. 前 K 个高频元素 -------------------- 6.滑动窗口最大值 思 约定不等于承诺〃/ 2024年04月01日 12:08/ 0 赞/ 63 阅读
相关 Day21——栈和队列专题 文章目录 3.有效的括号 4.删除字符串中的所有相邻重复项 5. 逆波兰表达式求值 ----------- ﹏ヽ暗。殇╰゛Y/ 2024年04月01日 11:53/ 0 赞/ 61 阅读
相关 Day20——队列和栈专题 文章目录 栈和队列专题 1.用栈实现队列 2.用队列实现栈 -------------------- 栈和队列 女爷i/ 2024年04月01日 11:08/ 0 赞/ 50 阅读
相关 栈和队列 20.[\[LeetCode\] Valid Parentheses 验证括号][LeetCode_ Valid Parentheses] 给定一个只包括 `'('`,`') Dear 丶/ 2024年02月19日 13:28/ 0 赞/ 80 阅读
相关 栈和队列 > 栈 是限定 仅在表尾 进行插入和删除操作的线性表 > > 队列 是只允许 在一端 进行 插入 操作、而在 另一端 进行 删除 操作的线性表 第一部分 相关定义 秒速五厘米/ 2023年07月14日 15:57/ 0 赞/ 151 阅读
相关 栈和队列 物理结构与逻辑结构 把物质层面的人体比作数据存储的物理结构,那么精神层面的人格则是数据存储的逻辑结构。逻辑结构是抽象的概念,它依赖于物理结构而存在。 ![在这里插入图 柔光的暖阳◎/ 2023年07月02日 03:24/ 0 赞/ 26 阅读
相关 栈和队列 栈: package Suan; public class Stack { private int size; 迈不过友情╰/ 2022年06月18日 07:54/ 0 赞/ 203 阅读
相关 数据结构专题( 二)——栈与队列 什么是栈? 其实栈就是一种后进先出的结构,就像一沓书本,每次取书本只能从最上面取,那么压在最底下的书本肯定是最先摆放在桌面上的,自然而然肯定是最后被取走的。 什么是队列? 古城微笑少年丶/ 2022年04月23日 09:06/ 0 赞/ 250 阅读
相关 队列组合(栈和队列) 题目描述 设计算法以求解从集合\{1…n\}中选取k(k<=n)个元素的所有组合。例如,从集合\{1…4\}中选取2个元素的所有组合的输出结果为:1 2,1 3,1 ╰半橙微兮°/ 2022年03月31日 07:42/ 0 赞/ 318 阅读
还没有评论,来说两句吧...