有效的括号——力扣20

news/2024/10/18 2:25:20/

题目描述

在这里插入图片描述

思路

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.ppmy.cn/news/206012.html

相关文章

Windows11越过限制安装方法

系统配置为 i7-6700HQ GTX1063 无TPM 2.0 实测修改Windows11安装助手运行兼容性为“WIndows7”可以跳过硬件与TPM限制执行安装流程 目前还不知道可不可以接收到后续更新。

计算机的k代表什么意思,电脑CPU后缀K、U、HQ、M分别代表什么你清楚吗?

朋友们或许都遇到过这样的问题&#xff0c;想选择一台合适的电脑&#xff0c;被各种参数折磨的不知所措&#xff0c;CPU作为电脑的核心&#xff0c;几乎决定着电脑的性能&#xff0c;然而CPU的后缀如此多&#xff0c;i7-6700HQ&#xff1f;i5-4210U&#xff1f;i7-6700K&#x…

cuda学习记录【1】

cuda学习记录【1】 记录本人学习cuda的一些坑 我使用的是神舟笔记本电脑&#xff0c;cpu i7-6700HQ&#xff0c;GTX 960M 分清显卡驱动和cudanvcc -V 和nvidia-smi都跑通了才行我在使用nvcc 编译时&#xff0c;编译成功&#xff0c;但是GPU无输出 编译写好的.cu文件时&…

i76700hq和i510300h哪个好

i5 10300H是笔记本平台的标准电压处理器&#xff0c;为四核心八线程&#xff0c;主频2.5GHz&#xff0c;睿频4.5GHz&#xff0c;45W TDP&#xff0c;8M三级缓存 选i5 10300H还是i76700hq这些点很重要 http://www.adiannao.cn/dy i76700HQ都是4核心8线程。i7 6700HQ支持最大内…

win11升级不满足最低系统要求怎么办 windows11升级不满足最低系统要求的解决方法

相信不少人都升级了Win11系统了,相比Win10来说,Win11系统最吸引人无非就是支持安卓应用的功能了,不过微软却对升级Win11的电脑做了很多的限制,不符合硬件的要求的电脑想要升级Win11话只能采用一键重装的方法来安装&#xff0c;那具体该怎么操作呢&#xff0c;下面我们一起学习一…

Dell 7559 安装Ubuntu以及Nvidia 960M驱动相关问题及解决

机子是戴尔游匣7559 i7-6700HQ Nvidia 960M win10 安装Ubuntu14.04只能小概率成功&#xff0c;后发现解决方案如下&#xff1a; https://www.zhihu.com/question/48422163 即在grub中的 quiet splash — 修改为 nomodeset再按F10&#xff0c;即可成功安装Ubuntu14.04 至于本机…

Win10突然变得很卡的一个解决思路

Win10突然变得很卡的一个解决思路 介绍 本人的笔记本&#xff0c;GTX 960M的显卡&#xff0c;i7-6700HQ的CPU,16G内存。 可是为什么&#xff01;玩一个守望先锋都会卡&#xff01;开个腾讯会议录屏都会卡&#xff01;风扇呜呜地转&#xff01; 经过一番思考&#xff0c;看看任…

SLAM中位姿估计的图优化方法比较

A Comparison of Graph Optimization Approaches for Pose Estimation in SLAM 作者&#xff1a;Andela Juric, Filip Kendeš, Ivan Markovic, Ivan Petrovic 论文地址&#xff1a;chrome-extension://ikhdkkncnoglghljlkmcimlnlhkeamad/pdf-viewer/web/viewer.html?filehttp…