栈的匹配问题

发现自己对栈掌握的不行啊,来补一补题。
因为栈 先进后出 的特点。非常适合做匹配类的题目。
例如 括号匹配
假如我们 将左括号 放在一起,当遍历到右括号的时候,这个右括号应该和离他最近的左括号匹配。也就是最晚遍历到的左括号。正好和栈的 先进后出相符和。
也就是说 我们遍历字符串,将左括号放到栈里面。
click me!
不符合的条件:
匹配的字符不对应。
左括号多 (也就是 st没有清空)
右括号多(也就是 string 还没有遍历完,st就空了)

class Solution {
public:bool isValid(string s) {if(s.size()%2!=0)return false;bool f=1;stack <char>st;for (auto i:s){if (i=='('||i=='{'||i=='[')st.push(i);else {if(st.empty()){f=0;continue;}if (i==')'){if (st.top()=='('){st.pop();}else f=0;}else if (i=='}'){if (st.top()=='{'){st.pop();}else f=0;}else if (i==']'){if (st.top()=='['){st.pop();}else f=0;}}}if(st.empty()&&f){return true;}else return false;}
};

tips:
在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶相不相等就可以了,

class Solution {
public:bool isValid(string s) {if (s.size()%2!=0)return false;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(']');else if (st.empty()||st.top()!=s[i]) return false;else st.pop();}   return st.empty();}
};

click me!
当然这道题也可以用 双指针来维护,区间的st 和ed,只不过细节很多。考虑越界的问题了。
删除相邻相同元素 。有效的括号 是匹配左右括号,本题是匹配相邻元素,最后都是做消除的操作。

class Solution {
public:string removeDuplicates(string s) {if(s.size()==1)return s;stack<char>st;for(auto i:s){if (st.empty()||i!=st.top())st.push(i);else st.pop();}string t;while(!st.empty()){t+=st.top();st.pop();}reverse(t.begin(),t.end());return t;}
};

逆波兰表达式求值
逆波兰表达式:是一种后缀表达式,所谓后缀就是指运算符写在后面。

平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 ) 。

该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * ) 。

适合用栈操作运算:遇到数字则入栈;遇到运算符则取出栈顶两个数字进行计算,并将结果压入栈中

class Solution {
public:int evalRPN(vector<string>& tokens) {stack<long long>st;for(auto i:tokens){if (i=="+"||i=="-"||i=="*"||i=="/"){long long t1=st.top();st.pop();long long t2=st.top();st.pop();if (i=="+")st.push(t1+t2);else if (i=="-")st.push(t2-t1);else if (i=="*")st.push(t1*t2);else if (i=="/")st.push(t2/t1);}else {st.push(stoll(i));}}long long result=st.top();return result;}
};

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

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

相关文章

Git 查看、新建、删除、切换分支

Git 是一个版本控制系统&#xff0c;软件开发者用它来跟踪应用程序的变化并进行项目协作。 分支的诞生便于开发人员在彼此独立的环境中进行开发工作。主分支&#xff08;通常是 main 或 master&#xff09;可以保持稳定&#xff0c;而新的功能或修复可以在单独的分支中进行开发…

MySQL之表的约束(上)

目录 空属性(NULL) 实例建表 插入操作 默认值(default) 建表 插入操作 NULL与default的结合 列描述 建表 zerofill 建表 插入操作 主键 建表 插入 主键的增加与去掉 去掉 增加 复合主键 插入的影响 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&a…

2 ECMAScript

JavaScript 概述 JavaScript 编程语言允许你在 Web 页面上实现复杂的功能;如果你看到一个网页不仅仅显示静态的信息,而是显示依时间更新的内容,或者交互式地图,或者 2D/3D 动画图像,或者滚动的视频播放器,等等——你基本可以确定,这需要 JavaScript 的参与 JavaScript 编程语言…

gams103作业1含提高部分

第一部分 检测碰撞 首先需要对所有点进行碰撞检测&#xff0c;判断是否与平面发生碰撞 这里碰撞检测根据读入给定的表面点和表面的法向量求点积判断是否小于0&#xff0c;如果是则证明两个的方向相反&#xff0c;发生碰撞。 同时判断是否速度方向和法线方向相反。 当同时满…

我国静止无功发生器(SVG)市场规模逐渐扩大 高压SVG为主流产品

我国静止无功发生器&#xff08;SVG&#xff09;市场规模逐渐扩大 高压SVG为主流产品 静止无功发生器&#xff08;SVG&#xff09;又称为静止同步补偿器、先进静止补偿器、静止调相机等&#xff0c;是利用全控型功率器件组成的桥式变流器来实现动态无功调节的一种先进无功自动补…

Table 表格--分页序号自增

代码&#xff1a; import { Space, Table, Tag } from antd; import type { ColumnsType } from antd/es/table; import React, { useState } from react;interface DataType {key: string;name: string;age: number;address: string;tags: string[]; }const data: DataType[]…

python爬虫入门(四)之Beautiful Soup库

一、什么是Beautiful Soup库 1、Beautiful Soup库是用来做HTML解析的库 Beautiful Soup把看起来复杂的HTML内容&#xff0c;解析成树状结构&#xff0c;让搜索和修改HTML结构变得更容易 2、第三方库&#xff0c;先安装 终端输入pip install bs4 from bs4 import Beautiful…

Linux服务管理(一)SSH服务

Linux服务管理-SSH服务 1、SSH的登录验证2、SSH的登录端口设置3、SSH的登录用户设置4、SSH的登录超时设置5、SSH的尝试登录次数设置6、ssh尝试次数超了&#xff0c;服务器端怎么放行 程序优化是有上限的&#xff0c;比如一个网站的代码量你只会随着需求越写越多不会越写越少。架…

想买开放式耳机怎么选?五款高热度产品甄选推荐!

在追求自由与舒适的今天&#xff0c;开放式蓝牙耳机以其独特魅力&#xff0c;正引领音频设备的新风尚。它们摒弃了传统入耳式的封闭束缚&#xff0c;让音乐与周围世界和谐共存&#xff0c;既保证了音质的清晰与沉浸&#xff0c;又保留了对环境的敏锐感知。开放式设计不仅减轻了…

16jQuery基本语法

【一】jQuery基本语法 jQuery(选择器).action() 简写 jQuery(选择器) ----> $(选择器) (1)js与jquery对比 <script>// 原生jslet p1Ele document.getElementById("p1");let p2Ele document.getElementById("p2"); ​p1Ele.style.color red…

Maven Dependencies missing jar 解决

信息摘要来自:https://blog.csdn.net/weixin_33769207/article/details/93681274 项目右键maven->update project。 如果还有 missing 的jar&#xff0c;再项目右键maven->update project&#xff0c;但是这次勾选 Force Update ...那一行&#xff0c;再OK。 如果此时依然…

【2024最新】Arduino通过Python进行串口通信控制电机

1. 背景 最近想研究一下用 Python 控制 Arduino 的技术&#xff0c;通过上网查询&#xff0c;发现可以用 Python 中的 serial 库来实现和 Arduino 主板的串口通信&#xff0c;从而控制 Arduino。 特此记录一下这个小项目的过程及出现的问题。 2. 基础准备 主板&#xff1a;…

selenium常用方法

打开浏览器定位元素的方法操作元素的方法操作浏览器的方法操作选择框的方法操作鼠标的方法 打开浏览器 from selenium import webdriver from selenium.webdriver.common.by import Bydriver webdriver.Edge()url "..." driver.get(url) driver.maximize_window()…

景联文科技打造高质量图文推理问答数据集,赋能大语言模型提升推理能力

大语言模型在处理推理任务时&#xff0c;不同于人类能够反思错误并修正思维路径&#xff0c;当它遇到自身知识盲区时&#xff0c;缺乏自我校正机制&#xff0c;往往导致输出结果不仅无法改善&#xff0c;反而可能变得更不准确。 需要依赖外部的知识库和推理能力来克服其在理解和…

【MySQL】2.库的操作

库的操作 一.创建数据库1.数据库的编码集 二.查看数据库三.修改数据库四.删除数据库五.数据库的备份和恢复 一.创建数据库 create database [if not exists] db_name [charsetutf8] [collateutf8_general_ci] //创建一个名为db_name的数据库&#xff0c;本质就是在/var/lib/my…

视觉图像面积计算

在图像处理和计算机视觉中&#xff0c;计算对象面积的常见方法有两种&#xff1a;使用四邻域标记算法和使用轮廓计算。每种方法在不同情况下有各自的优缺点。 四邻域标记算法&#xff1a; 优点&#xff1a; 简单易实现。能够处理带有孔洞的复杂区域&#xff08;只要孔洞不影响连…

WebKit性能优化秘籍:打造极速网页体验

WebKit性能优化秘籍&#xff1a;打造极速网页体验 在现代Web开发中&#xff0c;WebKit作为核心渲染引擎&#xff0c;其性能直接影响到网页的加载速度和运行效率。优化WebKit性能&#xff0c;不仅可以提升用户体验&#xff0c;还能增强应用的竞争力。本文将深入探讨如何优化Web…

Amazon Kinesis常用权限分类详解

Amazon Kinesis是一套用于实时收集、处理和分析数据流的平台化服务。为了确保Kinesis资源的安全性和访问控制,AWS提供了一套细粒度的权限管理机制。本文将详细介绍Kinesis的常用权限分类,并提供相应的JSON策略示例。 1. Kinesis Data Streams权限 Kinesis Data Streams是Ki…

蚓链实践告诉你“企业确保达成数字化营销效果的方法”

在如今这个数字化盛行的时代&#xff0c;企业想在激烈的市场竞争里崭露头角&#xff0c;确保数字营销效果那可是至关重要&#xff01;今天就来给大家聊聊实现这一目标的基本条件&#xff0c;来自蚓链数字化营销系统的广大用户体验总结。 一、精准的目标定位 企业一定要清楚地知…

uniapp 表格,动态表头表格封装渲染

1.接口表格数据&#xff1a; {"headers": [{"label": "实例名","name": "v1","order": 1,"hide": false,"dateTypeValue": null},{"label": "所属科室","name&quo…