首页 > 其他分享 >代码随想录 第11天 | 20. 有效的括号 ● 1047. 删除字符串中的所有相邻重复项 ● 150. 逆波兰表达式求值

代码随想录 第11天 | 20. 有效的括号 ● 1047. 删除字符串中的所有相邻重复项 ● 150. 逆波兰表达式求值

时间:2024-03-03 12:23:28浏览次数:15  
标签:11 deque 括号 随想录 pop else push 求值 stack

Leetcode:20. 有效的括号 - 力扣(LeetCode)

思路:就是用栈存左右括号,都为0就说明true,不为零说明有没有匹配成功的括号,是false,思路没有问题,时间超时了,还得用C++...,

java更好的思路如下:如果是左括号,push右括号,如果是右括号,判断是否与栈顶元素匹配,

JAVA

//deque.isEmpty();这个方法返回一个布尔值。如果deque为空,则返回true;如果deque不为空,则返回false。

package leetcode.editor.cn;

import java.util.*;
public class ID20ValidParentheses{
    public static void main(String[] args) {
        Solution solution = new ID20ValidParentheses().new Solution();
        StringBuilder sb = new StringBuilder();
        
        //执行测试
        
        System.out.println(sb);        
    }
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public boolean isValid(String s) {
        Deque<Character> deque = new LinkedList<>();
        char ch;
        for (int i = 0; i < s.length(); i++) {
            ch = s.charAt(i);
            //碰到左括号,就把相应的右括号入栈
            if (ch == '(') {
                deque.push(')');
            }else if (ch == '{') {
                deque.push('}');
            }else if (ch == '[') {
                deque.push(']');
            } else if (deque.isEmpty() || deque.peek() != ch) {
                return false;
            }else {//如果是右括号判断是否和栈顶元素匹配
                deque.pop();
            }
        }
        //最后判断栈中元素是否匹配
        return deque.isEmpty();
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}

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

思路:比较简单,和上边括号匹配一样。

JAVA 用字符串模拟栈

class Solution {
    public String removeDuplicates(String s) {
        StringBuffer sb = new StringBuffer();
        //用字符串模拟栈
        //top模拟栈顶指针
        int top = -1;
        for(int i = 0; i < s.length() ; i++){
            char c = s.charAt(i);
            //若top与c相等说明相邻重复,直接删除
            if(top >= 0 && c == sb.charAt(top) ){
                    sb.deleteCharAt(top);
                    top--;
            }else
            {
                //不相等就添加到栈中
                sb.append(c);
                top++;
            }
        }
        return sb.toString();

    }
}

扩展双指针:

 栈

 leetcode:150. 逆波兰表达式求值 - 力扣(LeetCode)

思路:由于整个字符串数组只有数字和符号组成,所以只要分辨开来就可以,四则运算时取出前两个pop顶端元素来做运算,运算完的结果再压入到栈里(push),因为栈的先进后出缘故,需要注意的是-和/的顺序。

class Solution {
    public int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<>();
        for(String i : tokens){

            if("+".equals(i)){
                stack.push(stack.pop()+stack.pop());
            }else if("-".equals(i)){
                //因为栈是先进后出,所以先出来的是减数,然后是被减数,所以要加-号
                stack.push(-stack.pop()+stack.pop());
            } else if ("*".equals(i)) {
                stack.push(stack.pop()*stack.pop());
            } else if ("/".equals(i)) {
                //要注意被除数和除数顺序,同-
                int temp2 = stack.pop();
                int temp1 = stack.pop();
                stack.push(temp1/temp2);
            } else {
                //不是四则运算,是数字
                //将字符串转换为Integer
                stack.push(Integer.valueOf(i));
            }
        }
        return stack.pop();
    }
}

 

标签:11,deque,括号,随想录,pop,else,push,求值,stack
From: https://www.cnblogs.com/lengbo/p/18048639

相关文章

  • 力扣118.杨辉三角
    题目:给定一个非负整数numRows,生成「杨辉三角」的前numRows行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。实现方法:从第三行开始,通过循环,依次求取上一行相邻两数的和,添加到结果里。funcgenerate(numRowsint)[][]int{ varr[][]int fori:=0;i<nu......
  • 11111
    #include<bits/stdc++.h>#include"minecraft.h"#include<Windows.h>usingnamespacestd;TxMinecraftmc;intmain(){boolcon=mc.ConnectMinecraft("zk","4cd7d6e558c943c397a3a5243fa78e19");if(!con){......
  • 数组(基于代码随想录)的随笔
    数组数组基础知识数组是存放在连续内存空间上的相同类型数据的集合。数组的元素是不能删的,只能覆盖。那么二维数组在内存的空间地址是连续的么?Java的二维数组在内存中不是3*4的连续地址空间,而是四条连续的地址空间组成!数组的经典题目二分法二分法时间复杂度:O(logn)......
  • 洛谷题单指南-二分查找与二分答案-P1182 数列分段 Section II
    原题链接:https://www.luogu.com.cn/problem/P1182题意解读:每段和的最大值越小,则分段数就越多,因此可以通过给定每段和的最大值,将分段数划分为两类:<=M,>M,对每段和的最大值进行二分即可。解题思路:二分的判定条件为,给定每段和的最大值,计算分段数,计算逻辑如下:依次遍历每一个数,求当前......
  • 夜深忽梦少年事(Part11)
    Part11先拔头筹这章更新的有点慢,因为博主上学期期末考试前一直在忙毕业设计,后来又生了大病,所以一直都没时间写,寒假的时候也忘了这回事……坐上去衢州的火车,我迎来了我最后一个OI赛季,路上还碰到了45中同行的准初三大佬winty和准高一gyfer,似乎gyfer和我一样中考压线特长生()说起来......
  • NEW CONCEPT ENGLISH 11-20
    NEWCONCEPTENGLISH11-20Lesson11 Isthisyourshirt?Keywordsandexpressionswhose pron. 谁的perhaps adv. 大概blue adj. 蓝色的white adj. 白色的catch v. 抓住LanguagepointsWhoseshirtisthat? 那是谁的衬衫?还可以这样说,Whoseisthatshi......
  • YL 模拟赛总结 11
    ProblemT1略。T2略。T3结论题。令所有牛的最终饥饿值为\(x\),则分别对于每一头牛进行考虑:对于第一头牛,它需要的最少玉米袋数为\(h_1-x\);对于第二头牛,它单独需要的最少玉米袋数为\(h_2-x\),而第一头牛已经用了\(h_1-x\)袋玉米,因此它需要的最少玉米袋数为\(h_2-x-......
  • 代码随想录算法训练营第三十四天| ● 860.柠檬水找零 ● 406.根据身高重建队列 ●
    柠檬水找零 题目链接:860.柠檬水找零-力扣(LeetCode)思路:注意对于20元的情况,有两种找零方式,            头一次见到这种情况,随便加一个标准输出才能通过的样例。classSolution{public:boollemonadeChange(vector<int>&bills){in......
  • 代码随想录算法训练营day11 | leetcode 20. 有效的括号、1047. 删除字符串中的所有相
    目录题目链接:20.有效的括号-简单题目链接:1047.删除字符串中的所有相邻重复项-简单题目链接:150.逆波兰表达式求值-中等题目链接:20.有效的括号-简单题目描述:给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右......
  • 代码随想录 第十天 | ● 理论基础 ● 232.用栈实现队列 ● 225. 用队列实现栈
    队列的方法:添加元素:add(Ee):将指定的元素添加到队列的尾部,如果队列已满则抛出异常。offer(Ee):将指定的元素添加到队列的尾部,如果队列已满则返回false。移除元素:remove():移除并返回队列的头部元素,如果队列为空则抛出异常。poll():移除并返回队列的头部元素,如果......