【专项刷题】— 栈

2024-09-05 23:36
文章标签 刷题 专项

本文主要是介绍【专项刷题】— 栈,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 1、删除字符串中的所有相邻重复项 - 力扣(LeetCode)

思路:

  1. 使用栈进行操作,每次入栈的时候和栈顶元素进行比对,如果相同的话就弹出栈顶元素
  2. 也可以用数组来模拟栈进行操作
  3. 代码:
    public String removeDuplicates(String s) {//转换成字符数组char[] ss = s.toCharArray();StringBuffer ret = new StringBuffer();for(char ch : ss){//当长度不为0且最后一个字符和要加入的字符相等的时候if(ret.length() > 0 && ret.charAt(ret.length()-1) == ch){//删除ret.deleteCharAt(ret.length() - 1);}else{//否则添加ret.append(ch);}}return ret.toString();}

 2、基本计算器 II - 力扣(LeetCode)

思路:

代码:

public int calculate(String ss) {char[] s = ss.toCharArray();Deque<Integer> st = new ArrayDeque<>();int n = s.length;char op = '+';int i = 0;while(i < n){//排除空格if(s[i] == ' '){i++;}else if(s[i] >= '0' && s[i] <= '9'){int tmp = 0;while(i < n && s[i] >= '0' && s[i] <= '9'){//先更新数值tmp = tmp*10 + (s[i] - '0');i++;}//根据当前的操作符进行入栈if(op == '+'){st.push(tmp);}else if(op == '-'){st.push(-tmp);}else if(op == '*'){st.push(st.poll() * tmp);}else{st.push(st.poll() / tmp);}}else{//更新操作符op = s[i];i++;}}//出栈相加int ret = 0;while(!st.isEmpty()){ret += st.poll();}return ret;}

3、字符串解码 - 力扣(LeetCode)

思路:

代码:

public String decodeString(String ss) {char[] s = ss.toCharArray();int n = s.length;Stack<StringBuffer> str = new Stack<>();str.push(new StringBuffer());//先放一个空串Stack<Integer> nums = new Stack<>();int i = 0;while(i < n){if(s[i] >= '0' && s[i] <= '9'){int tmp = 0;while(i < n && s[i] >= '0' && s[i] <= '9'){tmp = tmp*10 + (s[i] - '0');i++;}nums.push(tmp);}else if(s[i] == '['){//先跳过 [ ,提取后面的字符i++;StringBuffer tmp = new StringBuffer();while(i < n && s[i] >= 'a' && s[i] <= 'z'){tmp.append(s[i]);i++;}str.push(tmp);}else if(s[i] == ']'){//开始解析,StringBuffer tmp = str.pop();int k = nums.pop();while(k-- != 0){str.peek().append(tmp);}i++;}else{//处理纯字符的情况,直接加到栈顶字符的后面StringBuffer tmp = new StringBuffer();while(i < n && s[i] >= 'a' && s[i] <= 'z'){tmp.append(s[i]);i++;}str.peek().append(tmp);}}return str.peek().toString();}

 4、验证栈序列 - 力扣(LeetCode)

思路:

public boolean validateStackSequences(int[] pushed, int[] popped) {int j = 0;Deque<Integer> s = new ArrayDeque<>();//遍入栈的数组for(int x : pushed){//先入栈s.push(x);//如果栈顶与出栈顺序的数组相等while(!s.isEmpty() && s.peek() == popped[j]){s.pop();j++;}}return j == pushed.length;}

数组模拟栈:

public boolean validateStackSequences(int[] pushed, int[] popped) {int index = 0;int[] tmp = new int[pushed.length];for(int i = 0, j = 0; i < pushed.length; i++){tmp[index++] = pushed[i];while(index > 0 && tmp[index - 1] == popped[j]){index--;j++;}}return index == 0;}

这篇关于【专项刷题】— 栈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

【每日刷题】Day113

【每日刷题】Day113 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 91. 解码方法 - 力扣(LeetCode) 2. LCR 098. 不同路径 - 力扣(LeetCode) 3. 63. 不同路径 II - 力扣(LeetCode) 1. 91. 解码方法 - 力扣(LeetCode) //思路:动态规划。 cl

hot100刷题第1-9题,三个专题哈希,双指针,滑动窗口

求满足条件的子数组,一般是前缀和、滑动窗口,经常结合哈希表; 区间操作元素,一般是前缀和、差分数组 数组有序,更大概率会用到二分搜索 目前已经掌握一些基本套路,重零刷起leetcode hot 100, 套路题按套路来,非套路题适当参考gpt解法。 一、梦开始的地方, 两数之和 class Solution:#注意要返回的是数组下标def twoSum(self, nums: Lis

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II 1.题目 1.1递增子序列 题目链接:491. 非递减子序列 - 力扣(LeetCode) 视频讲解:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0491.%E9%80%92%E

代码随想录刷题day24丨93.复原IP地址 ,78.子集 , 90.子集II

代码随想录刷题day24丨93.复原IP地址 ,78.子集 , 90.子集II 1.题目 1.1复原IP地址 题目链接:93. 复原 IP 地址 - 力扣(LeetCode) 视频讲解:回溯算法如何分割字符串并判断是合法IP?| LeetCode:93.复原IP地址_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0093.%E5%A4%8

【笔记】数据结构刷题09

快速排序 215. 数组中的第K个最大元素 class Solution {public:int findKthLargest(vector<int>& nums, int k) {return divide(nums,0,nums.size()-1,nums.size()-k);}int divide(vector<int>& nums,int left,int right,int k)

C语言:刷题日志(1)

一.阶乘计算升级版 本题要求实现一个打印非负整数阶乘的函数。 其中n是用户传入的参数,其值不超过1000。如果n是非负整数,则该函数必须在一行中打印出n!的值,否则打印“Invalid input”。 首先,知道阶乘是所有小于及等于该数的正整数的积,并且0的阶乘为1。那么我们先来个简单的阶乘计算吧。 #include<stdio.h>int Fact(int n){if (n <=

【每日刷题】Day112

【每日刷题】Day112 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 1137. 第 N 个泰波那契数 - 力扣(LeetCode) 2. 面试题 08.01. 三步问题 - 力扣(LeetCode) 3. LCR 088. 使用最小花费爬楼梯 - 力扣(LeetCode) 1. 1137. 第 N 个泰波那契数 - 力扣(LeetCo

河南消防工程设计专项资质申请条件

一、企业基本条件 独立法人资格:企业必须具有独立法人资格,即依法成立的企业法人。 注册资本:企业注册资本应符合资质标准中的要求。例如,在申请乙级资质时,企业注册资本不少于100万元人民币。 经营场所:企业应有固定的经营场所,并具备必要的办公条件和技术设施。 经营范围:企业营业执照上的经营范围应包含消防设施工程设计等相关业务。 技术条件 技术负责人:技术负责人应具有不少于6年的消防设施工

【数据结构】【java】leetcode刷题记录--链表

简介 链表是一种常见的基础数据结构,它由一系列节点组成,每个节点包含数据域和指向下一个节点的指针。在Java中,链表通常用于实现动态数据结构,因为它可以根据需要动态地增加或减少节点。 链表简介: 节点结构:链表中的每个元素称为节点(Node),每个节点包含两部分:数据域(存储数据)和指针域(存储下一个节点的地址)动态性:链表的长度不是固定的,可以根据需要动态地增减节点。内存分配:链表中的节点

2024年上海松江启动建筑绿色低碳发展专项检查,共绘城市节能新篇章

2024年9月4日,2024年度松江区建筑工程绿色低碳发展工作专项检查会议正式开展,会议内容主要围绕以下三点, 1、《关于开展 2024年度本市建筑领域绿色低碳发展工作监督检查的通知》宣贯。 2、分项计量、能效测评工作验收要求介绍。 3、专项检查工作安排。 我国在早期没有高度重视建筑物的环保节能,造成了过去30年内竣工的建筑绝大多数是高能耗工程建筑,这类工程建筑在未来几十年里将耗费许多能源