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

news/2025/2/13 23:31:31/

三刷day11

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

20. 有效的括号

题目链接
解题思路:
有三种不匹配的情况:
第一种情况,字符串里左方向的括号多余了 。
在这里插入图片描述
第二种情况,括号没有多余,但是 括号的类型没有匹配上。
在这里插入图片描述
第三种情况,字符串里右方向的括号多余了,所以不匹配。
在这里插入图片描述
第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false

第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字符。所以return false

第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false

代码如下:

class Solution {
public:bool isValid(string s) {if (s.size() % 2 != 0) return false; // 剪枝操作,如果s的长度为奇数,一定不符合要求stack<char> st;for (int i = 0; i < s.size(); i++) {if (s[i] == '(') st.push(')');else if (s[i] == '{') st.push('}');else if (s[i] == '[') st.push(']');// 第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号 return false// 第二种情况:遍历字符串匹配的过程中,发现栈里没有我们要匹配的字符。所以return falseelse if (st.empty() || st.top() != s[i]) return false;else st.pop(); // st.top() 与 s[i]相等,栈弹出元素}// 第一种情况:此时我们已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false,否则就return truereturn st.empty();  //判断栈是否为空,如果不为空,也要return false;这里直接return st.empty()}
};

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

题目链接
解题思路:用字符串模拟栈
代码如下:

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

150. 逆波兰表达式求值

题目链接
解题思路:其实逆波兰表达式相当于是二叉树中的后序遍历
代码如下:

class Solution {
public:int evalRPN(vector<string>& tokens) {// 力扣修改了后台测试数据,需要用longlongstack<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;}
};

http://www.ppmy.cn/news/1368655.html

相关文章

Python线性代数数字图像和小波分析之二

要点 数学方程&#xff1a;数字信号和傅里叶分析&#xff0c;离散时间滤波器&#xff0c;小波分析Python代码实现及应用变换过程&#xff1a; 读取音频和处理音频波&#xff0c;使用Karplus-强算法制作吉他音频离散傅里叶计算功能和绘制图示结果计算波形傅里叶系数正向和反向&…

如何备份和恢复MySQL数据库?有哪些常见的备份工具和策略?

如何备份和恢复MySQL数据库&#xff1f;有哪些常见的备份工具和策略&#xff1f; 在数据库管理中&#xff0c;备份和恢复是非常重要的环节&#xff0c;它们保障了数据的安全性和可恢复性。对于MySQL这样的关系型数据库管理系统&#xff0c;了解并实施有效的备份策略至关重要。…

前端学习第一天-html基础

达标要求 网页的形成过程 常用的浏览器及常见的浏览器内核 web 标准三层组成 什么是HTML 熟练掌握HTML文档结构 熟练掌握HTML常用标签 1. 初识web前端 Web前端是创建Web页面或App等前端界面呈现给用户的过程。 Web前端开发是从网页制作演变而来&#xff0c;早期网站主…

Filebeat将csv导入es尝试

一、安装 在docker中安装部署ELKfilebeat 二、主要配置 - type: log # Change to true to enable this input configuration. enabled: true # Paths that should be crawled and fetched. Glob based paths. paths: - /home/centos/pip_v2.csv #源路径 #…

langchain学习笔记(八)

RunnableLambda: Run Custom Functions | &#x1f99c;️&#x1f517; Langchain 可以在pipeline中使用任意函数&#xff0c;但要注意所有的输入都只能是“1”个参数&#xff0c;当函数需要多个参数时需要采用字典来包装 itemgetter用法见langchain学习笔记&#xff08;六&…

day10_日志模块AOP

文章目录 1 记录操作日志1.1 记录日志的意义1.2 日志数据表结构1.3 记录日志思想1.4 切面类环境搭建1.4.1 日志模块创建1.4.2 Log1.4.3 OperatorType1.4.4 LogAspect1.4.5 EnableLogAspect1.4.6 测试日志切面类 1.5 保存日志数据1.5.1 SysOperLog1.5.2 LogAspect1.5.3 AsyncOpe…

【LeetCode:2368. 受限条件下可到达节点的数目 + BFS】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【运维】讲解

运维 "运维"是运营和维护的简称&#xff0c;在信息技术领域特指 IT 系统或服务的运营和维护。以下是运维的几个关键方面的概述&#xff1a; 监控&#xff1a; 系统监控&#xff1a;实时监控服务器和服务状态&#xff0c;包括 CPU、内存、磁盘使用率、I/O、网络状态等…