有效的括号——力扣20

news2024/11/26 20:43:22

题目描述

在这里插入图片描述

思路

1.判断括号的有效性可以使用「栈」这一数据结构来解决
2.遍历给定的字符串 s。当遇到一个左括号时,我们会期望在后续的遍历中,有一个相同类型的右括号将其闭合。由于后遇到的左括号要先闭合,因此我们可以将这个左括号放入栈顶。
3.当我们遇到一个右括号时,我们需要将一个相同类型的左括号闭合。此时,我们可以取出栈顶的左括号并判断它们是否是相同类型的括号。如果不是相同的类型,或者栈中并没有左括号,那么字符串 s 无效,返回 False。为了快速判断括号的类型,我们可以使用哈希表存储每一种括号。哈希表的键为右括号,值为相同类型的左括号。
4.在遍历结束后,如果栈中没有左括号,说明我们将字符串 s 中的所有左括号闭合,返回 True,否则返回 False。
5.注意到有效字符串的长度一定为偶数,因此如果字符串的长度为奇数,我们可以直接返回 False,省去后续的遍历判断过程。

#include<iostream>
#include<string>
#include<unordered_map>
#include<stack>

using namespace std;

bool isValid(string s){
		int len = s.size();
		if(len%2 !=0){
			return false;
		}
		unordered_map <char, char> pairs{{')', '('}, {']', '['}, {'}', '{'}};
		stack<char> st;
		for (char ch: s){
			if(pairs.count(ch)){   //count找到则返回1,否则返回0 
				if(st.empty() || st.top()!=pairs[ch]){
					return false;
				}
				st.pop();
			}
			else{   //其他字符放到栈里面   如(())   
				st.push(ch);
			}
		}
		return st.empty();
} 

int main(){
	string str;
	getline(cin, str);
	bool res = isValid(str);
	cout<<res<<endl;
}

复杂度

  • 时间复杂度O(n),其中n是字符串s的长度
  • 空间复杂度O(n+∣Σ∣),其中 Σ 表示字符集,本题中字符串只包含 6 种括号,∣Σ∣=6。栈中的字符数量为 O(n),而哈希表使用的空间为 O(∣Σ∣),相加即可得到总空间复杂度

关于哈希表的find和count的使用

  • 使用count,返回的是被查找元素的个数。如果有,返回1;否则,返回0。注意,map中不存在相同元素,所以返回值只能是1或0
  • 使用find,返回的是被查找元素的位置,没有则返回map.end()

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

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

相关文章

2.项目中的文件

项目的路径是这样的 目录 1 pages 1.1 json 1.2 wxml 1.3 wxss 1.4 js 2 utils 3 .eslintrc.js 4 app.js 5 app.json 6 app.wxss 7 project.config.json 8 project.private.config.json 9 sitemap.json 1 pages pages 用来存放所有小程序的页面&am…

数据结构与算法基础(青岛大学-王卓)(4)

第四弹啊&#xff0c;栈和队列终于叮叮咚咚看完了&#xff0c;小龙虾呀鳝鱼汤啊倍儿香~~~~&#xff0c;配合本文食用更香 &#x1f603; 文章目录 栈和队列栈队列案列的引入栈的表示和操作栈的抽象数据类型定义顺序栈顺序栈的表示顺序栈的初始化顺序栈基本操作顺序栈的入栈顺序…

基于Python的接口自动化-JSON模块的操作

目录 引言 一、JSON是啥&#xff1f; 二、JSON的有效数据类型 三、Python JSON库的使用 结语 引言 在使用Python进行接口自动化测试脚本时&#xff0c;一般都是脚本只写接口测试逻辑实现&#xff0c;而执行脚本时需要的测试用例数据都是写入excel、数据库或者指定的配置文…

入门编程指南:如何从零开始学习编程?

一、自学编程需要注意什么&#xff1f; 自学编程需要注意以下几点&#xff1a; 选择适合自己的编程语言&#xff0c;在学习初期建议选择易入手的编程语言。需要不断地练习&#xff0c;并建立自己的编程项目&#xff0c;以此提高编程技巧和应用能力。追求知识的全面性&#xf…

实验二十二、压控电压源二阶带通滤波器的参数选择

一、题目 如图1所示电路中&#xff0c;已知 R 51 k Ω R51\,\textrm kΩ R51kΩ&#xff0c; R 3 20 k Ω R_320\,\textrm kΩ R3​20kΩ&#xff1b; f 0 1 kHz f_01\,\textrm{kHz} f0​1kHz。利用 Multisim 分析下列问题&#xff1a; &#xff08;1&#xff09;选取合适…

[图表]pyecharts-K线图

[图表]pyecharts-K线图 先来看代码&#xff1a; import requests from typing import List, Unionfrom pyecharts import options as opts from pyecharts.charts import Kline, Line, Bar, Griddef get_data():response requests.get(url"https://echarts.apache.org/…

攻击者使用 Python 编译的字节码来逃避检测

以 PyPI&#xff08;Python 包索引&#xff09;等开源包存储库为目标的攻击者设计了一种新技术&#xff0c;可以将他们的恶意代码隐藏在安全扫描器、人工审查和其他形式的安全分析中。 在一次事件中&#xff0c;研究人员发现恶意软件代码隐藏在 Python 字节码 (PYC) 文件中&am…

Scala学习(十二)---模式匹配

文章目录 1.基本语法2.模式守卫3.匹配常量和类型4.匹配对象和样例类4.1 匹配对象4.2 匹配样例类 5.偏函数中的模式匹配 1.基本语法 在Scala中的模式匹配类似于Java中的switch语法 //模式匹配基本语法val a10val b20val c""c match {case "" >println(…

VScode远程连接虚拟机(ubuntu系统)

文章目录 1. Windows端安装VScode2. 安装远程登录插件3. 配置Remote-SSH插件关于关闭后如何打开该配置文件 4. 测试ubuntu与windows可否ping通5. 在Ubuntu中安装 SSH1.检查是否安装ssh-server2.安装openssh-server3.查看ssh服务是否启动4.Ubuntu中配置openssh-server开机自动启…

路径规划算法:基于蝠鲼觅食优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于蝠鲼觅食优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于蝠鲼觅食优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

6.4下周黄金最新行情走势分析及开盘交易策略

近期有哪些消息面影响黄金走势&#xff1f;下周黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周五(6月2日)&#xff0c;美市尾盘&#xff0c;现货黄金收报1947.82美元/盎司&#xff0c;大幅下跌29.70美元或1.50%&#xff0c;日内最高触及1983.43美元/盎司&…

chatgpt赋能python:Python升序排序

Python升序排序 Python是一种非常强大的编程语言&#xff0c;它在数学计算、数据处理等方面具备很强的优势。在实际应用中&#xff0c;我们经常需要对一系列数据进行排序。而在Python中&#xff0c;升序排序是非常常见的操作。本篇文章将介绍在Python中如何使用ifelse进行升序…

JavaWeb13(ajax01 AJAX介绍AJAX登陆AJAX加入购物车AJAX修改购物车商品数量)

目录 一. 什么是ajax 二.为什么需要AJAX? 三. 同步和异步的区别. 四.基于jQuery实现AJAX语法 4.1 语法1-$.ajax(url,[settings]). 4.1 语法2-$.get/post(url, [data], [callback], [type]). 五 .案例 5.1 ajax实现登录 ①html代码 用户登录 用户名&#xff1a; 密码…

【无功优化】基于改进教与学算法的配电网无功优化【IEEE33节点】(Matlab代码时候)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

揭秘照片修复技巧:手把手教你如何让模糊照片变清晰

作为一名修图小能手&#xff0c;行走于修图界&#xff0c;修复模糊的照片是必备的技能之一&#xff0c;最近收到很多粉丝的私信&#xff0c;清一色都是问的怎么免费把照片变清晰&#xff0c;为了给各位小伙伴们解决难题&#xff0c;我决定拿出我私藏多年的秘密武器&#xff0c;…

【CloudCompare教程】016:计算点云的法向量

本文讲解CloudCompare计算点云的法向量的方法。 文章目录 一、法向量概述二、法向量计算1. 平面法向量2. 二次曲面3.三角网格化一、法向量概述 法向量,是空间解析几何的一个概念,垂直于平面的直线所表示的向量为该平面的法向量。法向量适用于解析几何。由于空间内有无数个直…

HAL库记录-RTC

芯片:STM32F29IIGT6 阿波罗开发板 1.配置时钟 2.HAL外设配置 3.代码解析 生成rtc文件 RTC_HandleTypeDef hrtc;/* RTC init function */ void MX_RTC_Init(void) {/* USER CODE BEGIN RTC_Init 0 */RTC_TimeTypeDef rtc_time;RTC_DateTypeDef rtc_data;/* USER CODE END RTC…

node笔记_生成自定义目录文件

文章目录 ⭐前言⭐node生成目录&#x1f496; mkdirSync创建目录&#x1f496; stat判断目录是否存在&#x1f496; mkdir创建目录&#x1f496; 动态创建目录文件 ⭐结束 ⭐前言 大家好&#xff01;我是yma16&#xff0c;本文分享node生成自定义目录文件。 背景&#xff1a; …

chatgpt赋能python:Python中去掉数字末尾的0:一种简单有效的方法

Python中去掉数字末尾的0&#xff1a;一种简单有效的方法 Python作为一种流行的编程语言&#xff0c;经常被用于各种应用程序的编写。在这篇文章中&#xff0c;我们将介绍如何使用Python去掉数字末尾的零的一种简单有效的方法。 为什么要去掉数字末尾的0&#xff1f; 对于数…

【工具使用】STM32CubeMX-GPIO配置

一、概述 无论是新手还是大佬&#xff0c;基于STM32单片机的开发&#xff0c;使用STM32CubeMX都是可以极大提升开发效率的&#xff0c;并且其界面化的开发&#xff0c;也大大降低了新手对STM32单片机的开发门槛。     本文主要讲述STM32芯片的GPIO的配置及其相关知识。GPIO…