首页 > 编程语言 >栈经典题目(C++)

栈经典题目(C++)

时间:2024-06-09 11:30:50浏览次数:30  
标签:tmp 题目 string int 栈顶 C++ 括号 经典 op

文章目录


前言

一、删除字符串中的所有相邻重复项

1.题目解析

给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

示例:
输入:“abbaca”
输出:“ca”
解释:
例如,在 “abbaca” 中,我们可以删除 “bb” 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 “aaca”,其中又只有 “aa” 可以执行重复项删除操作,所以最后的字符串为 “ca”。

提示:
1 <= S.length <= 20000
S 仅由小写英文字母组成。

2.算法原理

我们本道题目可以通过模拟栈来完成操作。

以abbaca为例子。
如果栈顶元素和这个元素相同,我们就pop.否则我们就插入元素。
最终栈里面从顶到底剩下ac,我们还需要依次取出来,放到string中,再对这个string进行继续操作。

我们可以用数组模拟实现一个栈
在数组尾部插入删除,实现栈的进栈出栈。最后数组存留的内容,就是最后结果

3.代码编写

class Solution {
public:
    string removeDuplicates(string s) 
    {
        string ret="";
        for(auto&e:s)
        {    //首先判断是否有元素
            if(ret.size()&&ret.back()==e)
            {
                ret.pop_back();
            }
            else
            {
                ret+=e;
            }
        }
        return ret;

    }
};

二、 基本计算器 II

1.题目解析

给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
整数除法仅保留整数部分。
你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。
注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。

示例 1:
输入:s = “3+2*2”
输出:7

示例 2:
输入:s = " 3/2 "
输出:1

示例 3:
输入:s = " 3+5 / 2 "
输出:5

提示:
1 <= s.length <= 3 * 105
s 由整数和算符 (‘+’, ‘-’, ‘*’, ‘/’) 组成,中间由一些空格隔开
s 表示一个 有效表达式
表达式中的所有整数都是非负整数,且在范围 [0, 231 - 1] 内
题目数据保证答案是一个 32-bit 整数

2.算法原理

我们遇到这种计算之类的问题,都需要用栈来解决。

我们以(4-3+6*4/2-123+34)为例子,画图理解一下。
大思路:把带有乘除的看作一项,计算出来,根据运算符进行入栈,最后进行相加

根据规则,先算乘除,再算加减。
我们用op表示遍历前面最近的运算符。
op初始化为 ‘+’

标签:tmp,题目,string,int,栈顶,C++,括号,经典,op
From: https://blog.csdn.net/lim6ere/article/details/139534896

相关文章

  • 题目集4-6的总结性Blog
    一,前言一-1.第四次题集是接着前面的第三次题集的迭代,知识点主要是继承的运用,正则表达式的运用同样少不了,相对于前面一次添加了对选题以及填空题,难度也相对于前一次加大。一-2.第五次题集是新的题集迭代是有关电路的,知识点有抽象类,抽象方法的使用以及继承的使用,同样正则表达式;由......
  • 【四种语言一网打尽(C\C++\Python\Golang)】L1-005 考试座位号
    L1-005考试座位号每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着......
  • NSSCTF-Web题目6
    目录[NISACTF2022]checkin1、题目2、知识点3、思路[NISACTF2022]babyupload1、题目2、知识点3、思路[SWPUCTF2022新生赛]1z_unserialize1、题目2、知识点3、思路[NISACTF2022]checkin1、题目2、知识点010编辑器的使用、url编码3、思路打开题目,得到源......
  • C++ 对拍
    准备timeb毫秒级随机数文件这里以P1001A+BProblem为例。std.cpp-std.exe(std.lnk)#include<bits/stdc++.h>usingnamespacestd;signedmain(){intx,y;cin>>x>>y;cout<<x+y<<endl;return0;}force.cpp-force.exe#......
  • vscode编译c/c++找不到jni.h文件
    解决办法:一、下载JDK访问Oracle官网的Java下载页面:JavaDownloads|Oracle选择适合您操作系统的JDK版本:对于Windows,选择“Windowsx64”或“Windowsx86”(取决于您的系统是64位还是32位)。对于Linux,选择适合您Linux发行版的压缩包。对于Mac,选择“.dmg”或“.pkg”安装......
  • 对题目集4~6的总结
    1.前言答题判题程序-4是前几次题目迭代,在前几次的基础上新增加了选择、填空题,按照之前的思路拓展即可。家居强电电路模拟程序-1、2总体难度适中,不过与普通的信息处理相比,分配电压要考虑更多情况。2.设计与分析答题判题程序-4点击查看题目设计实现答题程序,模拟一个小型......
  • 【C++/STL】list(常见接口、模拟实现、反向迭代器)
     ......
  • C++ OpenCV 图像分类魔法:探索神奇的模型与代码
    ⭐️我叫忆_恒心,一名喜欢书写博客的研究生......
  • C++20协程接口说明
    等待体的接口说明: boolawait_ready()表达了等待体对象是否准备就绪,返回false表示没有准备好,返回true表示准备好了,这个返回值决定了等待体的执行流程。 boolawait_suspend(Coro::coroutine_handle<Task::promise_type>)当await_ready返回fasle时,进入此函数执行,如果await_r......
  • 柔性数组+总结C/C++中程序内存区域划分
    柔性数组一.柔性数组1.柔性数组的定义2.柔性数组的特点3.柔性数组的使用4.柔性数组的优势二.总结C/C++中程序内存区域划分前言:也许你从来没有听说过柔性数组这个概念,但是它确实是存在的。一.柔性数组1.柔性数组的定义C99中,结构体中的最后一个元素允许是未知大小的......