刷题记录|Day11 ● 20. 有效的括号 ● 1047. 删除字符串中的所有相邻重复项 ● 150. 逆波兰表达式求值

【代码随想录训练营】【Day11】第五章|栈与队列|20. 有效的括号|1047. 删除字符串中的所有相邻重复项|150. 逆波兰表达式求值 阅读详情

20. 有效的括号

题目描述

在这里插入图片描述

解题思路

典型的使用栈的题目

class Solution {
public:
    bool isValid(const string &s) {
        stack<char> c;//创建一个栈
        for(const char &i:s){//const char &防深拷贝,foreach循环不用考虑越界
            if(i=='('||i=='{'||i=='['){//若为左大、中、小括号
                c.push(i);//入栈
            }else if(!c.empty() && ((i==')'&&c.top()=='(') 
                                 || (i=='}'&&c.top()=='{') 
                                 || (i==']'&&c.top()=='['))){//当前栈不为空,且栈顶和右括号成对出现
                c.pop();//出栈
            }else{//若右括号遇到栈为空,或栈顶不匹配
                return false;
            }
        }
        return c.empty();//当前栈是否为空
    }
};

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

题目描述

在这里插入图片描述

解题思路

解法1 栈

class Solution {
public:
    string removeDuplicates(string s) {
        stack<char>temp;
        for(char c:s)
        {
            if(temp.empty()||c != temp.top())
            {
                temp.push(c);
            }
            else
            {
                temp.pop();
            }
        }
        string ans;
        while(!temp.empty())
        {
            ans += temp.top();
            temp.pop();
        }
        reverse(ans.begin(),ans.end());
    return ans;

    }
};

解法2 双指针

class Solution {
public:
    string removeDuplicates(string s) {
        int slow = 0, fast = 0;
        while(fast<s.size())
        {
            s[slow] = s[fast];
            if(slow>0&&s[slow] == s[slow-1])
            {
                slow--;
            }
            else{
                slow++;
            }
            fast++;
        }
        string ans(s.begin(),s.begin()+slow);
        return ans;

    }
};

解法3 用string模拟栈

由于 std::string\texttt{std::string}std::string 类本身就提供了类似「入栈」和「出栈」的接口,因此可以直接将需要被返回的字符串作为栈即可。

class Solution {
public:
    string removeDuplicates(string s) {
        string ans;
        for(char c : s)
        {
            if(ans.empty()|| ans.back()!=c)
            {
                ans.push_back(c);
            }
            else
            {
                ans.pop_back();
            }
        }
        return ans;

    }
};

150. 逆波兰表达式求值

题目描述

在这里插入图片描述

解题思路

请添加图片描述

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        // 力扣修改了后台测试数据,需要用longlong
        stack<long long> st; 
        for (int i = 0; i < tokens.size(); i++) {
            if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/") {
                long long num1 = st.top();
                st.pop();
                long long num2 = st.top();
                st.pop();
                if (tokens[i] == "+") st.push(num2 + num1);
                if (tokens[i] == "-") st.push(num2 - num1);
                if (tokens[i] == "*") st.push(num2 * num1);
                if (tokens[i] == "/") st.push(num2 / num1);
            } else {
                st.push(stoll(tokens[i]));
            }
        }

        int result = st.top();
        st.pop(); // 把栈里最后一个元素弹出(其实不弹出也没事)
        return result;
    }
};
Unity-Mirror网络框架-从入门到精通之MultipleMatches示例 Multiple Matches 示例主要讲述了如何在使用 Mirror 网路框架时管理多个游戏匹配。以及如何设置一个能够同时支持多个游戏会话的系统,使玩家能够加入他们所选择的比赛,而不是强制他们加入一个单一的匹配。 阅读详情

相关推荐

利用Langchain生成合成数据的实践指南

合成数据是相对于从真实世界事件中收集的数据而言的人工生成的数据。它用于模拟真实数据,同时避免隐私泄露或遇到真实数据中的局限性。:尽管合成数据有诸多优点,但应谨慎使用,因为它可能无法捕捉真实世界的复杂性。

eahba的博客 398

代码随想录算法训练Day11|LeetCode20-有效的括号、LeetCode1047-删除字符串中所有相邻重复项、LeetCode150-逆波兰表达式求值

给定一个只包括'('')''{''}''['']'的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false提示:s 仅由括号 ‘()[]{}’ 组成。

wish的博客 2271

从零搭建一个虚拟ECU:手把手用Autosar CP模块模拟汽车灯控系统(基于Vector工具链)

本文详细介绍了如何使用Vector工具链从零搭建一个基于Autosar CP架构的虚拟ECU系统,模拟汽车灯光控制功能。通过环境搭建、模块配置、通信栈设置到灯光控制逻辑实现的全流程指导,帮助开发者掌握Autosar CP模块术语的实际应用,并提供了系统集成与测试的实用方案。

weixin_42628688的博客 313

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

20. 有效的括号20. 有效的括号。

m0_74845823的博客 1788

选择的 Python 解释器无效,请尝试更改解释器以启用 IntelliSense、Lint 分析和调试等功能。请查看输出,详细了解解释器无效的原因。

摘要:在VS Code中配置Anaconda Python解释器时若出现"解释器无效"错误,可通过修改用户设置解决。具体步骤:1) 按Ctrl+Shift+P打开命令面板;2) 搜索并打开用户设置JSON文件;3) 添加conda路径配置项,示例格式为"python.condaPath": "D:\\Anaconda\\setup\\Scripts\\conda.exe";4) 同时启用环境激活选项"python.terminal.act

猿小白的博客 846

常用元器件使用方法13:物理层接口芯片DP83848的使用方法

介绍: DP83848是以太网物理层接口芯片,具有多种型号,从便于焊接角度考虑LQFP-48封装较为合适,采用LQFP-48封装的芯片,有2种型号,分别为DP83848I和DP83848C,如下图所示。 其主要区别是使用温度不同,如下图所示。 这2种芯片芯片网上均有销售,按理说DP83848C价格应该更加便宜,实际不然,DP83848I的价格低于DP83848C,考虑或与芯片的出货量...

snmplink的博客 1万+

代码随想录算法训练营DAY11|C++栈和队列Part.2|LeetCode:20.有效的括号、 1047.删除字符串中所有相邻重复项、150.逆波兰表达式

逆波兰表达式其实就是一种后缀表达式。把运算符作为中间结点,画出二叉树,然后这个二叉树的后序遍历就是这个数学式子的逆波兰表达式。对于计算机而言,后缀表达式是很方便计算机来进行计算的。

糖炒栗子 1829

万字长文介绍ARINC 653,以及在综合模块化航空电子设备(IMA)中的作用

ARINC 653 在综合模块化航空电子设备(IMA)的发展进程中扮演着极为关键的角色。从行业应用的实际情况来看,空客 A380 和波音 787 等先进飞机的航电系统套件充分体现了行业对 IMA 的高度重视和积极投入。在 IMA 架构下,核心软件具备强大的能力,能够支持多个航空电子应用程序的同时运行。这些应用程序可以并行开发,并高效地部署在同一个计算平台上,极大地提高了开发效率和系统集成度。ARINC 653 的出现为航空电子行业创造了一个充满活力和竞争力的商业环境。

2957

【算法训练 day11 有效的括号、删除字符串中的所有相邻重复项、逆波兰表达式求值】

整体比较简单,需要注意各个陷阱案例,在if分支中尽量考虑到可能的情况。算法时间复杂度为O(n),空间复杂度为O(n)。题目需要删除的是相邻元素,类似于括号那题,需要配成一对的去考虑都可以用栈的思想,时间复杂度为O(n),空间复杂度为O(n),不使用栈情况下:时间复杂度为O(n),空间复杂度为O(1)。考验对栈的应用。时间复杂度O(n),空间复杂度O(n)。

m0_67540113的博客 1105

PDAF相位对焦原理

pdaf光路图

camerall 1万+

Python 爬虫进阶技巧:新手必学的反爬突破与效率优化

本文系统总结了爬虫进阶的核心技巧,针对新手常见的反爬拦截、效率低下、动态页面解析等痛点问题,提出了可落地的解决方案。主要内容包括:通过随机UA池、代理IP池和Cookie池突破常见反爬机制;利用多线程/异步请求提升爬取效率;使用Selenium解析动态渲染页面;以及数据清洗方法提升数据质量。文中提供了完整的代码示例和实战对比数据,并强调爬虫开发应遵守合规性要求。这些技巧能帮助开发者快速提升爬虫实战能力,应对80%以上的常见爬取需求。

2503_91057718的博客 1436

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

LeetCode | 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

weixin_69675605的博客 1118

嵌入式Modbus协议面试题及参考答案

Modbus 协议采用主从模式进行通信,这种模式定义明确,便于在工业环境中实现设备之间的有序数据交互。在主从模式中,存在一个主站(Master)和多个从站(Slave)。主站通常是工业控制系统中的上位机,如 PLC、工控机等,它负责发起通信请求,控制整个通信过程。从站则是各种现场设备,如传感器、执行器等,它们接收主站的请求,并根据请求进行相应的操作,然后将结果返回给主站。主站的主要功能包括:发起数据读取或写入请求、控制通信的时序和流程、处理从站返回的数据。

大模型大数据攻城狮的专栏 2044

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

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

qq_41929830的博客 1198

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

代码随想录-算法训练营day11【栈与队列02:有效的括号、删除字符串中的所有相邻重复项、逆波兰表达式求值】

代码随想录-算法训练营day11【栈与队列02:有效的括号、删除字符串中的所有相邻重复项、逆波兰表达式求值】

upward 1221

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Day11:栈 LeedCode 20.有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值

例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。注:本题也可以用ArrayDeque来实现,ArrayDeque是 Deque的实现类,可以作为栈来使用,效率高于 Stack;思路:匹配括号是用栈解决的经典问题,我们遍历数组,将括号的另一半压入栈中,当数组中的值和栈尾值相同时,弹出栈中值。会选择两个相邻且相同的字母,并删除它们。

2301_76352996的博客 1015

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

代码随想录【day 11 栈与队列】| 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值

代码随想录【day 11 栈与队列】| 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值

weixin_43891814的博客 1393

算法训练营day11(栈和队列02:有效括号,删除字符串相邻重复项,逆波兰表达式求值)

/Deque方法有push(),pop(),peek(),ipush(),pop(),peek(),ipeek(),idEmpty()DequedEmpty()//如果 s 是一个有效的整数字符串(例如 "123", "-456", "0"),则 Integer.valueOf(s) 将成功执行并返回相应的 Integer 对象。if( tokens.equals("+") ){//字符串不能用 == 判断,需要用.equals()方法。//用字符串当栈,top用来当栈顶元素下标,为-1说明栈为空;

weixin_61931006的博客 1041

day11 有效的括号 删除字符串中的所有相邻重复项 逆波兰表达式求值

代码。

qq_43773652的博客 1047

算法训练Day11_栈与队列 | 20. 有效的括号 ● 1047. 删除字符串中的所有相邻重复项 ● 150. 逆波兰表达式求值

3.复杂度分析 时间复杂度:正确的括号组合需要遍历 1遍 s;,故时间复杂度为O(n)O(n)O(n); 空间复杂度:哈希表和栈使用线性的空间大小。 4.注意 栈初始化的时候,初始化一个占位符???,避免如果有括号多一个当弹出栈匹配的时候,栈为空,抛出错误(此时还没有去判断栈的大小); LeetCode:1047. 删除字符串中的所有相邻重复项 问题描述 3.复杂度分析 时间复杂度:O(n)O(n)O(n),其中 nnn是字符串的长度。我们只需要遍历该字符串一次。 空间复杂度:O(n)O(n)O

qq_43506087的博客 923

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

相邻字符消除的操作,很多用栈来解决!栈与递归之间在某种程度上是可以转换的遍历字符串数组可以用String转数字用deque,尤其是ArrayDeque实现类当做栈比Stack更快!注意遍历顺序和出栈顺序是相反的!具体实现要变一下。

qq_35904005的博客 1048

Day 11 20.有效的括号 1047.删除字符串中的所有相邻重复项 150.逆波兰表达式求值

​ 那么思路就是,遍历整个字符串,将所有的左括号丢进栈1,把所有的右括号丢进栈2,然后同时pop栈1栈2,看pop出的元素是否匹配,若存在不匹配或者栈提前延后判空的情况,则return false;​ 和有效括号的思路是一致的,判断栈中是否为空或者元素是否重复元素,然后将元素存进栈中,若读取到相同元素则pop,直到将所有的字符都存进栈中,然后将栈中的元素存储到res字符串中再reverse即可。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串,判断字符串是否有效。

qq_46025584的博客 956

零基础代码随想录【Day11】|| 20. 有效的括号 ,1047. 删除字符串中的所有相邻重复项 ,150. 逆波兰表达式求值

本题要删除相邻相同元素,相对于20.有效的括号来说其实也是匹配问题,20.有效的括号是匹配左右括号,给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。左右括号不匹配:匹配一次右括号,发现与栈中右括号不符合,直接返回false。右括号多余:匹配一次右括号,栈中右括号弹出一次,还没遍历完,栈已经为空了。左括号多余:匹配一次右括号,栈中右括号弹出一次,最后还是会留下右括号。讲完了栈实现队列,队列实现栈,接下来就是栈的经典应用了。150. 逆波兰表达式求值。

Andrew______的博客 906

算法Day11 | 20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用), 150. 逆波兰表达式求值

输入: ["10", "6", "9", "3", "+", "-11", " * ", "/", " * ", "17", "+", "5", "+"]但还有一些技巧,在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶相不相等就可以了,比左括号先入栈代码实现要简单的多了!第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false。给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

Evans857的博客 883

LeetCode Day11 栈与队列: 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

Tips: 在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶相不相等就可以了,比左括号先入栈代码实现要简单。当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 )。该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * )。,上式即便写成 1 2 + 3 4 + * 也可以依据次序计算出正确结果。[2] 直接将字符串作为栈 --> 省去栈需转为字符串的操作。

iuhnkjgyi的博客 888

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

遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false。:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false。代码随想录中代码用到了标准库函数,之前不知道,这次也做一个积累。:遍历字符串匹配的过程中,发现栈里没有要匹配的字符。1.第一种情况,字符串里左方向的括号多余了 ,所以不匹配。2.第二种情况,括号没有多余,但是括号的类型没有匹配上。3.第三种情况,字符串里右方向的括号多余了,所以不匹配。

weixin_64883584的博客 1112
上一篇: MIT6.S081 Lec01
下一篇: 刷题记录|Day13 ● 239. 滑动窗口最大值 ● 347.前 K 个高频元素
null_one
博客等级 码龄8年 847粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值