代码随想录算法训练营第11天|20.有效的括号 1047.删除字符串中的所有相邻重复项

20.有效的括号

        栈类的题目都很神奇,这道题分有不有效有三种情况,一种是左括号多了,一种是右括号多了,一种是左括号和右括号不匹配。我们设置一个栈来放s[i]所对应的右括号,如果s[i]==‘{’,那么就在栈里放‘}’,依次类推.......假如遇到的是一个右括号,那么就看看它和栈顶元素是否匹配(因为栈顶元素对应的是最近的一个左括号),如果不匹配就返回false,对应的是左括号和右括号不匹配的情况。假如说还没把s遍历完,栈就为空了,说明这时候右括号多了,也返回false,最后怎么判断左括号多了的情况呢?就看遍历完后栈是否为空,不为空说明左括号多了,不匹配。

https://leetcode.cn/problems/valid-parentheses/

class Solution {
public:bool isValid(string s) {stack<char>right;for(int i=0;i<s.size();i++){if(s[i]=='{'){right.push('}');}else if(s[i]=='('){right.push(')');}else if (s[i]=='['){right.push(']');}else if(right.empty()||right.top()!=s[i])return false;elseright.pop();}return right.empty();}
};

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

        这道题和上一道题的内核有点像,本质上都是消消乐,即遇到匹配的元素就两个一起销毁。所以一开始的思路是先设置一个栈,然后遍历给定的字符串s,如果s[i]==栈顶元素,说明可以消消乐了,所以stack.pop(),然后我们再把栈里面的元素取出来,但由于是先进后出,所以结果还得reverse。不过,我们也可以用字符串来模拟栈,这样就不用reverse,相当换了一个方向,我们还是遍历字符串,如果s[i]和result的最后一个元素相同,那么就消消乐,result.pop_back(),注意,这里的前提条件是栈即字符串result不能为空;如果元素不同,那么result.push_back(s[i])。

https://leetcode.cn/problems/remove-all-adjacent-duplicates-in-string/description/、

class Solution {
public:string removeDuplicates(string s) {string result;for(int i=0;i<s.size();i++){   if(!result.empty()&&s[i]==result.back()){result.pop_back();}else{result.push_back(s[i]);}}    return result;}
};

150.逆波兰表达式求值

        这道题还是采用消消乐的方法,一旦遇到符号就把栈顶元素和栈顶元素的下一个元素进行运算,然后又返回栈里。这道题看似简单,实际上有几个小细节需要注意:虽然tokens[i]对应的都只是一个字符,但是它还是字符串,所以判断的时候要写tokens[i] == "+"而不能写tokens[i] == ‘+’,注意单引号和双引号的区别,同时,我们把元素入栈的时候,由于是把字符串入栈,所以要先把字符串转换为int类型再放入栈中,所以要用stoi函数, st.push(std::stoi(tokens[i]));最后,我们要得到结果,这时候需要取出栈里面的结果,就要用到stack.top()。

https://leetcode.cn/problems/evaluate-reverse-polish-notation/

class Solution {
public:int evalRPN(vector<string>& tokens) {stack<int>st;for(int i=0;i<tokens.size();i++){if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/") {int num1=st.top();st.pop();int num2=st.top();st.pop();int temp;if(tokens[i]=="+"){temp=num2+num1;}else if(tokens[i]=="-"){temp=num2-num1;}else if(tokens[i]=="*"){temp=num2*num1;}else if(tokens[i]=="/"){temp=num2/num1;}st.push(temp);}else{st.push(std::stoi(tokens[i]));}}int result=st.top();st.pop();return result;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/750898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型语言系列-Agent

文章目录 前言一、Agent是什么&#xff1f;二、LLM Agent1.西部世界小镇Agent2.BabyAGI3.AutoGPT4.Voyager Agent 总结 前言 自2022年ChatGPT诞生以来&#xff0c;LLM获得了收获了大量关注和研究&#xff0c;但究其根本&#xff0c;技术还是要为应用服务&#xff0c;如何将LLM…

Lua中文语言编程源码-第五节,更改lcorolib.c协程库函数, 使Lua加载中文库关键词(与所有的基础库相关)

源码已经更新在CSDN的码库里&#xff1a; git clone https://gitcode.com/funsion/CLua.git 在src文件夹下的lcorolib.c协程库函数&#xff0c;Coroutine Library&#xff1a;表明这个C源文件实现了Lua的协程库&#xff08;Coroutine Library&#xff09;&#xff0c;即提供了…

探索编程新纪元:Code GeeX、Copilot与通义灵码的智能辅助之旅

在人工智能技术日新月异的今天&#xff0c;编程领域的革新也正以前所未有的速度推进。新一代的编程辅助工具&#xff0c;如Code GeeX、Copilot和通义灵码&#xff0c;正在重塑开发者的工作流程&#xff0c;提升编程效率&#xff0c;并推动编程教育的普及。本文将深入探讨这三款…

Docker 镜像源配置

目录 一、 Docker 镜像源1.1 加速域名1.2 阿里云镜像源&#xff08;推荐&#xff09; 二、Docker 镜像源配置2.1 修改配置文件2.1.1 Docker Desktop 配置2.1.2 命令行配置 2.2 重启 Docker 服务2.2.1 Docker Desktop 重启2.2.2 命令行重启 2.3 检查是否配置成功 参考资料 一、 …

kubernetes-pod的调度

kubernetes-pod的调度 kubernetes-71、pod停止之后&#xff0c;服务不会停止2、pod endpoint service之间的关系3、pod的调度总述1. 资源请求&#xff08;Resource Requests&#xff09;和资源限制&#xff08;Resource Limits&#xff09;2. 节点选择器&#xff08;Node Selec…

Android 卸载系统自带APP

https://www.xda-developers.com/uninstall-carrier-oem-bloatware-without-root-access/ pm uninstall -k --user 0 NameOfPackage pm install-existing NameOfPackage you can simply use “adb shell cmd package install-existing ” in ADB and you’ll get the package…

ES6 Nunber类型、Math对象扩展

二进制和八进制表示法 ES6 提供了二进制和八进制数值的新的写法&#xff0c;分别用前缀0b&#xff08;或0B&#xff09;和0o&#xff08;或0O&#xff09;表示。 0b111110111 503 // true 0o767 503 // true// 非严格模式 (function(){console.log(0o11 011); })() // true/…

RAxML-NG安装与使用-raxml-ng-v1.2.0(bioinfomatics tools-013)

01 背景 1.1 ML树 ML树&#xff0c;或最大似然树&#xff0c;是一种在进化生物学中用来推断物种之间进化关系的方法。最大似然&#xff08;Maximum Likelihood, ML&#xff09;是一种统计框架&#xff0c;用于估计模型参数&#xff0c;使得观察到的数据在该模型参数下的概率最…

SpringCloudAlibaba系列之Seata实战

目录 环境准备 1.下载seata安装包 2.修改配置文件 3.准备seata所需配置文件 4.初始化seata所需数据库 5.运行seata 服务准备 分布式事务测试 环境准备 1.下载seata安装包 Seata-Server下载 | Apache Seata 本地环境我们选择稳定版的二进制下载。 下载之后解压到指定目录…

网络分层架构(七/四层协议)详解

OSI七层模型和TCP/IP四层模型 业内普遍的分层方式有两种&#xff1a;OSI七层模型 和TCP/IP四层模型。记忆则为 “应表会传网数物” 关于协议&#xff1a; ① OSI七层模型详解 结构名 功能 主要设备 应用层 是最靠近用户的OSI层。用户接口、应用程序。应用层向应用进程展示…

基金养老怎么选?

养老分三大支柱&#xff0c;分别是基本养老金&#xff0c;企业年金&#xff0c;个人养老金。这里讲一下个人养老金如果靠基金如何来养老。 基金用来养老&#xff0c;分为三种&#xff0c;一中是养老目标基金&#xff0c;一种是高分红的基金&#xff0c;最后一种是有定期现金流的…

不同数据库中sql如何添加数据

在 SQL 中向数据库表中添加数据&#xff0c;通常使用 INSERT 语句。下面是各种主流数据库的代码案例&#xff0c;演示如何向表中添加数据&#xff1a; MySQL -- 向表中添加一行数据 INSERT INTO table_name (column1, column2, column3) VALUES (value1, value2, value3);Pos…

try catch捕获异常,如果代码多了就显得冗余重复。我们可以用ControllerAdvice捕获全局异常变量处理

try catch捕获异常&#xff0c;如果代码多了就显得冗余重复。我们可以用ControllerAdvice捕获全局异常变量处理 比如重复重入unique数据&#xff0c;sql会报错 全局异常捕获 package com.itheima.reggie.common;import lombok.extern.slf4j.Slf4j; import org.springframework…

详解MySql索引

目录 一 、概念 二、使用场景 三、索引使用 四、索引存在问题 五、命中索引问题 六、索引执行原理 一 、概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。暂时可以理解成C语言的指针,文章后面详解 二、使用场景 数据量较大&#xff0c;且…

P1881 绳子对折

题目描述 FJ 有一个长度为 L&#xff08;1≤L≤10,000&#xff09;的绳子。这个绳子上有 N&#xff08;1≤N≤100&#xff09;个结&#xff0c;包括两个端点。FJ 想将绳子对折&#xff0c;并使较短一边的绳子上的结与较长一边绳子上的结完全重合&#xff0c;如图所示&#xff…

CleanMyMac X2024永久免费的强大的Mac清理工具

作为产品功能介绍专员&#xff0c;很高兴向您详细介绍CleanMyMac X这款强大的Mac清理工具。CleanMyMac X具有广泛的清理能力&#xff0c;支持多种文件类型的清理&#xff0c;让您的Mac始终保持最佳状态。 系统垃圾 CleanMyMac X能够深入系统内部&#xff0c;智能识别并清理各种…

kotlin flow sample的用法

sample 方法是用于对数据流进行采样的操作&#xff0c;它会根据指定的时间间隔或者其它条件从数据流中抽取样本。 以下是三个使用 sample 方法的示例&#xff1a; 使用时间间隔进行采样&#xff1a; import kotlinx.coroutines.delay import kotlinx.coroutines.flow.* impo…

C++中内存泄露的几种情况?

在C中&#xff0c;内存泄露主要发生在以下几种情况&#xff1a; 动态分配的内存未释放&#xff1a;使用new操作符动态分配的内存&#xff0c;如果没有在不再需要的时候使用delete释放&#xff0c;就会导致内存泄露。这通常发生在对象生命周期结束时忘记删除&#xff0c;或者在异…

MinGW64 windows gcc编译器安装

下载编译好的文件包 https://sourceforge.net/projects/mingw-w64/ 打开网址 界面左上方 点File 滚轮 滚到下面 点 红框 解压 配置path 环境变量

Vue3+TS+Vite 找不到模块“@/components/xxx/xxx”或其相应的类型声明

引入vue文件时文件是存在的&#xff0c;引入路径也是对的&#xff0c;报找不到模块&#xff0c;有一些解决方案是在tsconfig.json里面做一些配置&#xff0c;大家可以自行百度&#xff08;不知道是不是我百度的不对&#xff0c;我的没有解决&#xff09;还有一种是在项目根目录…