有效的括号 + 点击消除 || 匹配问题

目录

点击消除: 

有效的括号: 


点击消除: 

点击消除_牛客题霸_牛客网 (nowcoder.com)icon-default.png?t=N7T8https://www.nowcoder.com/practice/8d3643ec29654cf8908b5cf3a0479fd5?tpId=308&tqId=40462&ru=/exam/oj

如题目所述,

示例1:" abbc ",消除了相同且相邻的字母 b 后,剩下 " ac ", a 和 c 不是相邻的字母,最终结果为 " ac "

示例2:" abba ",消除了相同且相邻的字母 b 后,剩下 " aa ",消除 b 前不相邻的字母 a ,在消除后变相邻了,此时消除字母 a ,按照题目要求,最终输出结果为 0

我们可以借助栈后进先出的原理来解决这个问题:

假设 s 是输入的字符串,s[ i ] 是当前我们访问的字母,我们用字符串 result 来模仿栈,

1、当 result 为空,先把字母添加到 result 中,如图,此时把 a 添加到 result 中

2、当 result 不为空时,判断 result 的最后一个字符(相当于栈顶元素) 和 s[ i ] 是否为相等的字母,

a. 如果不相等,把字母 s[ i ] 添加到 result 中(相当于进栈),如图,假设 result 的栈顶元素为 a,s[ i ] 为 b,它们不相等,所以 b 进栈

b. 如果相等,说明栈顶元素和 s[ i ] 是相邻且相等的字母,栈顶元素和 s[ i ] 是要消除的字母,此时删除栈顶元素,完成了一次消除。如图,假设 result 的栈顶元素为 b,s[ i ] 为 b,它们相等且相邻,所以删除栈顶元素 b ,此时的栈顶元素变为 a。

根据上面的原理,再次来理解示例2:

i 从 0 开始:

s[ 0 ]:一开始栈为空,所以 a 进栈

s[ 1 ]:当访问字母 b 时,b 和栈顶元素 a 不相等,所以 b 进栈

s[ 2 ]:当访问字母 b 时,b 和栈顶元素 b 相等,所以 b 出栈

s[ 3 ]:当访问字母 a 时,a 和栈顶元素 a 相等,所以 a 出栈,此时 result 为空字符

用栈的思想就可以解决一开始相等但不相邻的字母,再经过消除后,变成相等且相邻的字母的消除问题。

#include <iostream>
using namespace std;
#include<string>
int main() {string enter;//接收输入的字符串cin>>enter;//输入string result;//最终结果的字符串,模拟栈for(int i=0;i<enter.size();i++)//遍历输入的字符串{//字符串不为空,且字符串的最后一个字符(即栈顶元素)和enter[i]字符相等if(result.size() && enter[i] == result.back()){result.pop_back();//消除字符串的最后一个字符,相当于出栈}else {//相当于进栈 result+=enter[i];}}if(result.size()){cout<<result<<endl;//字符串不为空}else {cout<<0<<endl;//字符串为空}return 0;
}

 

有效的括号: 

20. 有效的括号 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/valid-parentheses/submissions/525036077/

有效括号的匹配问题,需要处理三种匹配:

1、数量匹配,如果 s 中的括号个数为奇数个,则一定不匹配,直接利用库函数求出字符串的长度,长度为奇数,直接返回 false,如果 s 中的括号个数为偶数个,当左右括号的数量不匹配,返回 false

2、类型匹配() 匹配,{} 匹配,[] 匹配,否则都是属于不匹配

3、顺序匹配,必须先出现左括号,再出现右括号,比如 ) (,虽然都是小括号,但是先出现的是右括号,故不匹配

除此之外,类似上一题的点击消除,比如字符串为 " ( { [ ] } ) ”,消除了 [ ] 之后,字符串为 " ( { } ) ”,{ } 匹配,再次消除,字符串剩下 " (  ) ”, (  )匹配,所以整个字符串的括号都是匹配的

我们同样可以用栈的思想来解决问题:

1、如果访问的字符是左括号,则进栈

2、如果访问的字符是右括号

a. 如果栈为空,说明栈里面没有左括号,此时顺序不匹配,返回 false

b.如果栈不为空,则需要判断栈顶元素(左括号)和右括号是否匹配,如果左右括号匹配,则需要删除栈顶元素(因为这个栈顶元素的左括号已经有和它匹配的右括号了,不需要继续判断了),如果左右括号不匹配,直接返回 false

3、把所有的括号都判断完之后,并不意味着可以返回 true 了,如果栈不为空,说明左右括号的数量不匹配,返回 false,如果栈为空,说明所有的括号都匹配了,返回 true

class Solution {
public:bool isValid(string s) {stack<char> match;//存左括号if(s.size()%2!=0)return false;//单数个括号,数量不匹配for(int i=0;i<s.size();i++){//左括号,进栈if(s[i]=='('||s[i]=='['||s[i]=='{'){match.push(s[i]);}   else{//右括号,且栈不为空,和栈顶元素匹配//不匹配,或者栈为空,falseif(match.empty())return false;if((s[i]==')' && match.top()!='(')|| (s[i]==']' && match.top()!='[')|| (s[i]=='}' && match.top()!='{'))return false;match.pop();//匹配,删除栈顶元素} }//s遍历完,且栈为空,true//栈不为空,falseif(match.empty())return true;elsereturn false;}
};

 

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

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

相关文章

14-Error Handling (错误处理)

ESP32-S3错误处理&#xff1a;理解并掌握其重要性 在编程中&#xff0c;错误处理是一种重要的编程实践&#xff0c;它可以帮助我们的程序在遇到错误时能够优雅地恢复&#xff0c;而不是崩溃或产生不可预测的结果。在IDF中官方提供一些实用的错误处理技巧。&#x1f469;‍&…

微信小程序酒店选择日期和入住人数(有效果图)

效果图 app.vue onLaunch:function(options){this.defaultcache()}defaultcache(){// 入住信息缓存var arr this.getDateTime();var ReserVation {reservType:0,//1 人数 2日期InCheckin:{},//入离日期peopleArr:[{title:成人,num:2},{title:儿童,num:0},{title:宝子,num:1…

第二部分 Python提高—GUI图形用户界面编程(六)

其他组件学习 文章目录 OptionMenu 选择项Scale 移动滑块颜色选择框文件对话框简单输入对话框通用消息框ttk 子模块控件 OptionMenu 选择项 OptionMenu(选择项)用来做多选一&#xff0c;选中的项在顶部显示。显示效果如下&#xff1a; from tkinter import * root Tk();ro…

【机器学习】分类与预测算法评价的方式介绍

一、引言 1、机器学习分类与预测算法的重要性 在数据驱动的时代&#xff0c;机器学习已经成为了处理和分析大规模数据的关键工具。分类与预测作为机器学习的两大核心任务&#xff0c;广泛应用于各个领域&#xff0c;如金融、医疗、电商等。分类算法能够对数据进行有效归类&…

【分治】Leetcode 库存管理 III

题目讲解 LCR 159. 库存管理 III 本题的含义就是让求出最小的k个数 算法讲解 class Solution { public:void my_qsort(vector<int>& nums, int l, int r){if(l > r) return ;int i l, left l-1, right r1;int key nums[rand() % (r - l 1) l];//完成分三…

uni-app项目引入阿里巴巴矢量图标库

uni-app项目引入阿里巴巴矢量图标库 1.下载图标库中的symbol下载至本地 2.解压文件夹并放入项目中 我这里放入的位置是src/static/icon目录下 3.修改文件指向路径为相对路径 即在路径iconfont前面添加斜杠 4.app.vue的style中引入 import static/icon/iconfont.css; 5…

(2022级)成都工业学院数据库原理及应用实验四: SQL简单查询

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、成品仅提供参考 3、如果成品不满足你的要求&#xff0c;请寻求其他的途径 运行环境 window11家庭版 Navicat Premium 16 Mysql 8.0.36 实验要求 在实验三的基础上完成下列查询&#xff1a; 1、查询所有…

ComfyUI IPAdapter plus安装教程

ComfyUI是一个创新的Stable Diffusion AI绘图工具WebUI&#xff0c;它采用节点流程式设计&#xff0c;将Stable Diffusion的操作流程细分为多个节点&#xff0c;从而实现了更高精度的工作流定制与优秀的可复现性。相较于传统WebUI&#xff0c;ComfyUI不仅操作更为流畅&#xff…

在西非土地上播种希望

在西非这片广阔而充满活力的土地上播种希望&#xff0c;我们可以从多个维度进行解读和行动&#xff1a; 教育援助&#xff1a;投资于当地的教育事业&#xff0c;改善学校设施&#xff0c;提供教育资源&#xff0c;尤其是对女童教育的重视&#xff0c;让更多孩子有机会接受基础…

成都欣丰洪泰文化传媒有限公司打造电商服务新标杆

随着互联网的快速发展&#xff0c;电子商务行业蓬勃兴起&#xff0c;成为推动经济发展的重要力量。在这个大背景下&#xff0c;成都欣丰洪泰文化传媒有限公司凭借其专业的电商服务&#xff0c;在激烈的市场竞争中脱颖而出&#xff0c;成为行业的佼佼者。 一、公司背景与实力 成…

v1.9.2-httpsok快速申请免费SSL证书

v1.9.2-&#x1f525;httpsok快速申请免费SSL证书 介绍 httpsok 是一个便捷的 HTTPS 证书自动续签工具&#xff0c;专为 Nginx 、OpenResty 服务器设计。已服务众多中小企业&#xff0c;稳定、安全、可靠。 一行命令&#xff0c;一分钟轻松搞定SSL证书自动续期 更新日志 V1…

endnote21从安装到使用!文献引用!Mac版

视频学习和资源获取 新建库 选择上方导航栏处的File下的New 软件 软件界面可以分成四个部分 2是个人图书馆 3是对某一分类中文献的展示 最右侧是对具体一篇文献的摘要、编辑以及PDF 有回形针标志意味着这篇有全文&#xff0c;也就是有pdf 如果没有回形针代表它只有引文信…

HCIP的学习(10)

OSPF不规则区域划分 区域划分 非骨干与骨干区域直接相连骨干区域唯一 限制规则&#xff1a; 非骨干区域之间不允许直接相互发布区域间路由信息OSPF区域水平分割&#xff1a;从非骨干区域收到的路由信息&#xff0c;ABR设备能接收到不能使用&#xff08;从某区域传出的路由&…

敢不敢挑战?看完这篇 Python 学习攻略不成大牛就请我退出 IT !

目录 0基础小白怎么学Python&#xff1f; Python基本概念最全图 1.Python 解释器&#xff1a; 2.Python数据结构&#xff1a; 3.变量与运算符&#xff1a; 4.Python 流程控制&#xff1a; 5.Python 文件处理&#xff1a; 6.Python 输入输出&#xff1a; 7.Python 异常…

注意力机制基本思想(一)

​&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客&#x1f525; 系列专栏&#xff1a; &#x1f3c0;《深度学习基础知识》 相关专栏&#xff1a; ⚽《机器学习基础知识》 &#x1f3d0;《机器学习项目实战》 &#x1f94e;《深度学习项目实战…

2024年华中杯B题论文发布+数据预处理问题一代码免费分享

【腾讯文档】2024年华中杯B题资料汇总 https://docs.qq.com/doc/DSExMdnNsamxCVUJt 行车轨迹估计交通信号灯周期问题 摘要 在城市化迅速发展的今天&#xff0c;交通管理和优化已成为关键的城市运营问题之一。本文将基于题目给出的数据&#xff0c;对行车轨迹估计交通信号灯…

七月论文审稿GPT第4.5版:通过15K条paper-review数据微调Llama2 70B(含各种坑)

前言 当我们3月下旬微调完Mixtral 8x7B之后(更多详见&#xff1a;七月论文大模型&#xff1a;含论文的审稿、阅读、写作、修订 )&#xff0c;下一个想微调的就是llama2 70B 因为之前积攒了不少微调代码和微调经验&#xff0c;所以3月底apple便通过5K的paper-review数据集成功…

机器视觉【1】-机械臂视觉

文章目录 Eye-to-HandEye-in-Hand基于Eye-in-Hand型机械臂单目视觉定位单目相机标定针孔相机模型畸变标定方法机械臂手眼标定手眼标定求解图像预处理图像灰度化与二值化图像滤波图像特征匹配机械臂单目视觉定位目标物体图像深度信息目标物体中心定位参考文献根据机械臂与相机所…

基于PyAutoGUI图片定位的自动化截图工具--完成了

1、计划 压测完成后需要编写性能测试报告&#xff0c;报告中所需数据截图较多&#xff0c;使用自动化操作方便快捷&#xff0c;就编写一个界面工具以便后续复用。 基于PyAutoGUI图片定位的自动化截图工具–jmeter部分 基于PyAutoGUI图片定位的自动化截图工具–jmeter部分&#…

jenkins从节点配置说明

目的 打包构建时使用从节点&#xff0c;从节点所在服务器配置4C8G5000G&#xff08;服务器2&#xff09; 前提 首先在服务器1上部署jenkins服务&#xff0c;即主节点&#xff0c;默认节点名称为master 步骤 1&#xff09;登录进入jenkins平台&#xff0c;在系统设置中&…