首页 > 编程语言 >代码随想录算法训练营第十一天|力扣20.有效的括号、力扣1047.删除字符串中所有相邻重复项、力扣150.逆波兰表达式求值

代码随想录算法训练营第十一天|力扣20.有效的括号、力扣1047.删除字符串中所有相邻重复项、力扣150.逆波兰表达式求值

时间:2023-08-15 19:22:07浏览次数:57  
标签:第十一天 deque temp 随想录 pop 力扣 括号 push stack

有效的括号(力扣20.)

  • 括号匹配时使用栈解决的经典问题

  • 题意其实就像我们在写代码的过程中,要求括号的顺序是一样的

  • 有左括号,那么在对应位置则必须有右括号

  • 第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false

    第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字符。所以return false

    第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false

class Solution {
    public boolean isValid(String s) {
        //如果长度不能被2整除,则返回false
        if(s.length() % 2 != 0){
            return false;
        }
        Deque<Character> deque = new LinkedList();
        char temp;
        for(int i = 0;i < s.length();i++){
            temp = s.charAt(i);
            if(temp == '('){
                deque.push(')');
            }else if(temp=='['){
                deque.push(']');
            }else if(temp=='{'){
                deque.push('}');
            }else if(deque.isEmpty()||deque.peek()!=temp){
                return false;
            }else{
                deque.pop();
            }
        }
        return deque.isEmpty();
    }
}

删除字符串中的所有相邻重复项(力扣1047.)

  • 栈可以用来实现相邻匹配问题
  • while(!deque.isEmpty())
class Solution {
    public String removeDuplicates(String s) {
        Deque<Character> deque = new LinkedList();
        char temp;
        for(int i = 0; i < s.length();i++){
            temp = s.charAt(i);
            if(deque.isEmpty()||deque.peek()!=temp){
                deque.push(temp);
                continue;
            }else{
                deque.pop();
                continue;
            }
        }
        StringBuilder result = new StringBuilder();
        if(deque.size() == 0){
            return "";
        }
       while(!deque.isEmpty()){
            result.append(deque.pop());
        }
        return result.reverse().toString();
    }
}

逆波兰表达式求值(力扣150.)

  • 后缀表达式,检测是否为符号或数字并进行运算和push
class Solution {
    public int evalRPN(String[] tokens) {
        Deque<Integer> stack = new LinkedList();
        for(String s:tokens){
            if("+".equals(s)){
                stack.push(stack.pop()+stack.pop());
            }else if("-".equals(s)){
                stack.push(-stack.pop()+stack.pop());
            }else if("*".equals(s)){
                stack.push(stack.pop()*stack.pop());
            }else if("/".equals(s)){
                int temp = stack.pop();
                int temp2 = stack.pop();
                stack.push(temp2/temp);
            }else{
                stack.push(Integer.valueOf(s));
            }
        }
        return stack.pop();
    }
}

标签:第十一天,deque,temp,随想录,pop,力扣,括号,push,stack
From: https://www.cnblogs.com/zcctxr/p/17632234.html

相关文章

  • 力扣- 删除有序数组中的重复项
    给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:更改......
  • [代码随想录]Day17-二叉树part06
    题目:654.最大二叉树思路:和前中序构造树差不多的方法,以前是返回值,现在是返回树代码:/***Definitionforabinarytreenode.*typeTreeNodestruct{*Valint*Left*TreeNode*Right*TreeNode*}*/funcconstructMaximumBinaryTree(nums[]in......
  • [代码随想录]Day16-二叉树part05
    题目:513.找树左下角的值思路:层序遍历是最好的选择了,先放右节点,再放左节点最后一个元素就是最左侧的节点。说白了层序遍历就是广度优先搜索BFS。代码:funcfindBottomLeftValue(root*TreeNode)int{node:=rootq:=[]*TreeNode{root}forlen(q)>0{......
  • 力扣---23. 合并 K 个升序链表
    给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例1:输入:lists=[[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->2->3->......
  • [代码随想录]Day15-二叉树part04
    题目:110.平衡二叉树思路:就是后序,如果左右差的超过了1,那么就直接返回-1,如果最后收到了-1那一定是false。代码:/***Definitionforabinarytreenode.*typeTreeNodestruct{*Valint*Left*TreeNode*Right*TreeNode*}*/funcisBalanced(......
  • 代码随想录算法训练营第十六天| 104.二叉树的最大深度 111.二叉树的最小深度 222.
      104.二叉树的最大深度 (优先掌握递归)    卡哥建议:什么是深度,什么是高度,如何求深度,如何求高度,这里有关系到二叉树的遍历方式。大家要先看视频讲解,就知道以上我说的内容了,很多录友刷过这道题,但理解的还不够。   题目链接/文章讲解/视频讲解:https://programmerc......
  • 代码随想录算法训练营第十五天| 层序遍历 10 ,226.翻转二叉树 101.对称二叉树 2
     层序遍历   卡哥建议:看完本篇可以一口气刷十道题,试一试, 层序遍历并不难,大家可以很快刷了十道题。  题目链接/文章讲解/视频讲解:https://programmercarl.com/0102.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%B1%82%E5%BA%8F%E9%81%8D%E5%8E%86.html  做题思......
  • 力扣-最长公共前缀
    编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。 示例1:输入:strs=["flower","flow","flight"]输出:"fl"示例2:输入:strs=["dog","racecar","car"]输出:""解释:输入不存在公共前缀。 提示:1<=st......
  • 力扣---1289. 下降路径最小和 II
    给你一个 nxn 整数矩阵 grid ,请你返回 非零偏移下降路径 数字和的最小值。非零偏移下降路径 定义为:从 grid 数组中的每一行选择一个数字,且按顺序选出来的数字中,相邻数字不在原数组的同一列。 示例1:输入:grid=[[1,2,3],[4,5,6],[7,8,9]]输出:13解释:所有非零偏......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
    704二分查找题目给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。第一想法判断条件是value=target因为数组是升序,其实每种查找方法应该相差不大?不过题目都标了二分查找了emmm思......