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

CH340驱动安装全攻略:从Windows到MacOS的避坑指南(2025最新版) 本文提供2025年最新版CH340驱动安装全攻略,涵盖Windows、MacOS和Linux三大操作系统。详细解析了驱动安装的核心原理、标准流程,并针对Windows设备管理器报错、MacOS系统安全限制等常见“坑点”提供了深度排错与解决方案,旨在帮助开发者快速稳定地完成USB转串口通信配置。 阅读详情

20. 有效的括号

题目链接:20.有效的括号

卡尔文解

解题思路重点:

  1. 第一种情况,字符串里左方向的括号多余了 ,所以不匹配。
    在这里插入图片描述

  2. 第二种情况,括号没有多余,但是 括号的类型没有匹配上。
    在这里插入图片描述

  3. 第三种情况,字符串里右方向的括号多余了,所以不匹配。
    在这里插入图片描述
    我们的代码只要覆盖了这三种不匹配的情况,就不会出问题,可以看出 动手之前分析好题目的重要性。
    在这里插入图片描述

代码实现:

class Solution {
public:
    bool isValid(string s) {
        
        stack<char> stk;
        int size = s.size();

        if ( (size % 2 ) != 0 ) return false;

        // Totally 3 scenarios:
        // 1. More left braces.
        // 2. equal braces but not matched.
        // 3. More right braces.
        
        for ( int idx = 0; idx < size; idx++ ){
            
            if ( s[ idx ] == '(' )
                stk.push( ')' );
            
            else if ( s[ idx ] == '[')
                stk.push( ']' );
            
            else if ( s[ idx ] == '{')
                stk.push( '}' );
            else if ( stk.empty() || ( s[ idx ] != stk.top()) )
                return false;
            else 
                stk.pop();
        }

        return stk.empty();

    }
};

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

题目链接:1047.删除字符串中的所有相邻重复项

卡尔文解

解题思路及注意事项:

本题要删除相邻相同元素,相对于20. 有效的括号 (opens new window)来说其实也是匹配问题,20. 有效的括号 是匹配左右括号,本题是匹配相邻元素,最后都是做消除的操作。

本题也是用栈来解决的经典题目。

那么栈里应该放的是什么元素呢?

我们在删除相邻重复项的时候,其实就是要知道当前遍历的这个元素,我们在前一位是不是遍历过一样数值的元素,那么如何记录前面遍历过的元素呢?

所以就是用栈来存放,那么栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。

然后再去做对应的消除操作。 如动画所示:
在这里插入图片描述

代码实现:

class Solution {
public:

    // Use a string instead of stack , will output result accordingly.
    //           Use a String to simulate a stack
    //   Tail ------------------> Head
    //   back      a b c d        front
    string removeDuplicates(string s) {
        string result;

        for ( char c: s ){
            
            // A or B 
            if ( s.empty() || ( c != result.back()) )
                result.push_back( c );
            // Not ( A or B ) = ( !A && !B )
            // means ( result is not empty && c equals result back char  )
            else 
                result.pop_back();

        }

        return result;
    }
};

150. 逆波兰表达式求值

题目链接:150.逆波兰表达式求值

卡尔文解

解题思路及注意事项:

在上一篇文章中1047.删除字符串中的所有相邻重复项 (opens new window)提到了 递归就是用栈来实现的。
所以栈与递归之间在某种程度上是可以转换的! 这一点我们在后续讲解二叉树的时候,会更详细的讲解到。
那么来看一下本题,其实逆波兰表达式相当于是二叉树中的后序遍历。 大家可以把运算符作为中间节点,按照后序遍历的规则画出一个二叉树。

但我们没有必要从二叉树的角度去解决这个问题,只要知道逆波兰表达式是用后序遍历的方式把二叉树序列化了,就可以了。
在进一步看,本题中每一个子表达式要得出一个结果,然后拿这个结果再进行运算,那么这岂不就是一个相邻字符串消除的过程,和1047.删除字符串中的所有相邻重复项 (opens new window)中的对对碰游戏是不是就非常像了。

代码实现:

class Solution {
public:
    int evalRPN(vector<string>& tokens) {

        stack<long long> stk;

        for ( auto item : tokens ){

            cout << "item = " << item << endl;

            if (( item == "+") || 
                ( item == "-") ||
                ( item == "*") ||
                ( item == "/") ){

                long long op1 = stk.top(); stk.pop();
                long long op2 = stk.top(); stk.pop();

                if ( item == "+" ) stk.push( op2 + op1 );
                if ( item == "-" ) stk.push( op2 - op1 );
                if ( item == "*" ) stk.push( op2 * op1 );
                if ( item == "/" ) stk.push( op2 / op1 );
            }
            else{
                stk.push( stoll( item ));
            }
        }
        return( stk.top());
    }
};
24、JavaFX MP3 音频播放器开发详解 本文详细介绍了如何使用JavaFX开发一个功能丰富的MP3音频播放器,涵盖文件拖放加载、音频播放控制、音频频谱可视化、进度定位滑块等核心功能,并提供了完整的代码实现和解析。适合希望学习JavaFX多媒体应用开发的开发者参考。 阅读详情

相关推荐

储能系统架构和控制

探讨了储能系统中EMS(能源管理系统)、BMS(电池管理系统)和PCS(功率转换系统)之间的协同机制,以及组串式和集中式储能系统的技术架构、优势和局限性。EMS根据电价、电网需求和电池状态制定充放电策略,BMS提供电池数据,PCS执行充放电控制。组串式系统具有独立管理和灵活扩展的优势,但成本较高;集中式系统成本效益高,但存在环流和木桶效应问题。

蓝龙宝藏的博客 3967

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

例如:4 + 13 / 5,这就是中缀表达式,计算机从左到右去扫描的话,扫到13,还要判断13后面是什么运算符,还要比较一下优先级,然后13还和后面的5做运算,做完运算之后,还要向前回退到 4 的位置,继续做加法,你说麻不麻烦!所以就是用栈来存放,那么栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。从栈中弹出剩余元素,此时是字符串ac,因为从栈里弹出的元素是倒序的,所以再对字符串进行反转一下,就得到了最终的结果。

dc爱傲雪和技术 1575

CiteSpace关键词聚类图谱含义详细解析

CiteSpace关键词聚类图谱含义详细解析 回顾上一次推文:CiteSpace关键词共现图谱含义详细解析 其中有一句: 当你人工已经可以很容易的进行归纳后,就不需要再利用CiteSpace聚类功能啦。 我们来看一下上次推文做出来的关键词共现图谱: 人工不好归纳!那怎么聚类呢? 此时便可使用CiteSpace的聚类功能啦! 如下所示:我们可以清晰地看到上边的关键词共现网络聚成了一个个不规则区域...

qq_39974284的博客 6万+

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

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

qq_46025584的博客 956

Win10内网离线安装NET3.5,绝对成功,保姆级

今天工作安装工具软件套装3.5组件!也在csdn上找了很多方法躺了很多坑,我总结如下! 其实就一条,什么版本的win10装什么版本的net3.5 我的电脑是1909版本,用2004H2的镜像是没有用的,dism组件报错8024402C 所以我下载1909镜像挂在虚拟光驱 ,管理员模式下powershell dism.exe /online /enable-feature /featurename:NetFX3 /Source:E:\sources\sxs dism.exe /online /en..

唉呀妈呀脑瓜疼 6万+

UART中断接收的实战陷阱:HAL库常见误区与性能调优指南

本文深入解析STM32 HAL库UART中断接收机制,揭示常见实战陷阱如数据溢出、中断优先级配置不当等,并提供性能调优方案。重点介绍如何使用空闲中断处理不定长数据、DMA与中断混合模式优化,以及工业级错误恢复与流量控制策略,帮助开发者构建稳定可靠的串口通信系统。

pea55的博客 747

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

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

2301_76352996的博客 1015

194、产线 Camera 校准与测试:终检测试项、规格线制定与量产数据监控

摘要: 文章通过"绿屏门"案例揭示了产线Camera校准测试中的关键问题,提出了系统性改进方案。在终检测试方面,建议增加多增益暗电流测试、混合光源色温测试和径向亮度梯度测试,覆盖用户真实场景。规格线制定强调用CPK替代固定百分比,区分硬软规格并建立动态调整机制。量产监控需关注参数趋势、边界模组分布,构建失效模式数据库。实践建议包括测试冗余设计、规格余量预留、自动化监控、供应商数据共享和人工抽检保留。文章指出Camera产线质量管控需形成"测试设计-规格优化-数据监控"闭环,以数据驱动决策避免客诉风险。

sundong_81的博客 192

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

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

wish的博客 2271

ABAP BDC 处理踩坑笔记:把错误挡在录制之前,把稳定做进每一行 BDCDATA

本文总结了SAP BDC(批输入)开发中的常见问题和解决方案。重点包括:1)理解BDCDATA本质是模拟人工操作而非直接操作数据库;2)数据格式化技巧,如金额、日期、物料号等字段的标准化处理;3)通过CTU_PARAMS参数控制执行环境,确保屏幕尺寸和更新模式一致;4)不要依赖sy-subrc,应通过解析MESSTAB消息判断业务是否成功;5)录制阶段的常见陷阱及解决方法;6)疑难问题的系统性解决思路;7)建议建立完善的错误处理机制,包括日志记录和重跑功能。文章提供了实用的ABAP代码示例和配置建议,帮助开

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 265

OPPO 后端校招面试,过于简单了!

你好,我是 Guide。2026 届秋招陆续开奖公司的越来越多了,今天来看一家手机厂 OPPO。前几天,已经分享了和今年校招开奖的情况。其中,小红书的薪资最为炸裂,大白菜一年都能给到 51w+。不过,相对应的工作强度和压力也是真的难顶,确实很难有钱多又轻松的活!OV (OPPO 和 Vivo)这几年发展真还可以的,这两家的高端机口碑都不错。本人也是最近入手了一款 Vivo 的上一代旗舰,拍照是真的不错啊!每个月会有 1.2k 生活补贴,生活费是按照 8 % 缴纳。

JavaGuide 750

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

括号匹配是使用栈解决的经典问题。首先我们要分析有几种不匹配的情况,就是左边多出来括号了,就是右边多出来括号了,就是没有相应类型的括号可以匹配。当遇到左括号,就往栈里放相应的右括号,碰到相应的右括号,就从栈里消除右括号,这是一个小技巧,这可比碰到左括号就往栈里放左括号简单多了。

m0_74583479的博客 1804

RK3568 OpenHarmony3.2 蓝牙模块AP6275S适配(已更新)

OpenHarmony3.2 Release版默认是适配AP6275s这款蓝牙芯片的,但是打开蓝牙,发现无法扫描到设备、连接设备。目前平台soc为RK3568,根据项目要求,自定义外设。接下来将以解决bug为目的,学习和记录OpenHarmony平台下蓝牙模块的适配流程。RK809 CLK:32.768KHzUART1M1:与蓝牙模块通讯的串口:GPIO4_B6:GPIO4_A5WAKE_GPIO:未定义,硬件拉高1.8V: 未定义,悬空主要是打开串口,/dev/ttyS1,得到文件描述符fd。

Martian_Jonas的博客 2245

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

随想录:当遇到左括号,直接将右括号入栈,这样弹出的时候比较就简单一些。第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false。②如果用栈的话,那就是不断将字符串s中的字符压入栈,如果遇到字符和栈顶相同,则跳过该字符并删除栈顶的元素。注意,第一个取得是表面的那个数字,第二个才是下面的数字,所以后面运算的时候,要用num2 - num1。那么什么时候说明左括号和右括号全都匹配了呢,就是字符串遍历完之后,栈是空的,就说明全都匹配了。

weixin_45048521的博客 702

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

计算机控制技术及应用

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

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

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

iuhnkjgyi的博客 888

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

bolinmengling的博客 754

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

我们在删除相邻重复项的时候,其实就是要知道当前遍历的这个元素,我们在前一位是不是遍历过一样数值的元素,那么如何记录前面遍历过的元素呢?第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false。在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶相不相等就可以了,比左括号先入栈代码实现要简单的多了!第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false。首先要弄清楚,字符串里的。

qq_43440821的博客 947

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

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

weixin_69675605的博客 1118

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

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

qq_41929830的博客 1198

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

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

weixin_43891814的博客 1393

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

使用栈来解决,不难。

ToriaHHG的博客 420

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

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

Bessy_L的博客 385

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

zsbd

雨后的放线君 631

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

所以就是用栈来存放,那么栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。分析完之后,代码其实就比较好写了,但还有一些技巧,在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶相不相等就可以了,比左括号先入栈代码实现要简单的多了!第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false。这里有三种不匹配的情况,第一种情况,字符串里左方向的括号多余了 ,所以不匹配。

wangs29的博客 841

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

然后把栈里面的值重新输到字符串里面(从字符串末端开始输,因为栈是从尾部遍历)返回。最后我们要检查一下栈里面有没有元素,如果有就说明左括号多了。,说明是对应的,不一样就返回false,并且我们要先检查。我们选择如果遇到三种左括号就把对应的右括号。,如果空的就要提前返回false。,就可以直接把栈顶元素pop出去。思路:(思路和前两道题差不多)当我们进行遍历时,判断如果。就把遍历的元素加到栈里面。150. 逆波兰表达式求值。如果我们字符串遍历到的。,运算完之后再返回去。如果和我们遍历的元素。

m0_74082772的博客 1998

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

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

qq_35904005的博客 1048
上一篇: 代码随想录【Day 10】232.用栈实现队列、225. 用队列实现栈
下一篇: 代码随想录【Day 12】 | 239. 滑动窗口最大值 、347.前 K 个高频元素
Pittsman
博客等级 码龄5年 1粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值