当前位置: 首页 > news >正文

【力扣】用栈判断有效的括号

有效的括号原题地址

方法一:栈

对于特殊情况,当字符串的长度为奇数时,一定不是有效的括号

对于一般情况,考虑使用数据结构栈。

遍历字符串,

  1. 遇到左括号时,就入栈
  2. 遇到右括号时,
    1. 栈顶元素是与这个右括号匹配的左括号,就成功匹配了一对括号,出栈即可。
    2. 栈顶元素不是与这个右括号匹配的左括号,或者栈为空,就匹配失败,不是有效的括号

当字符串遍历完时,

  1. 若栈不为空,说明还有左括号未匹配,不是有效的括号
  2. 若栈为空,说明所有括号都匹配完了,是有效的括号

由于题目描述说明,字符串中的字符不是左括号就是右括号,所以可以使用 key-value 模型的哈希结构来存储键值对,其中右括号为键,左括号为值。这样,对于每个字符,只需判断其是否在哈希表中,就能判断是左括号还是右括号遇到右括号时,可以直接在哈希表中查询其对应的左括号

C++ 中,建议使用 unordered_map<char, char> 来存储键值对,并定义成静态的类成员变量,因为在整个程序运行期间只需要存在一份。

[](){()}
^
入栈 -> [[](){()}^
出栈[](){()}^入栈 -> ([](){()}^出栈[](){()}^入栈 -> {[](){()}^入栈 -> {([](){()}^出栈 -> {[](){()}^出栈,此时栈为空,是有效的括号
// 方法一:栈
class Solution
{
public:bool isValid(string s){// 字符串长度为奇数if (s.size() % 2){return false;}stack<char> st;for (auto ch : s){// 右括号出栈匹配if (pairs.count(ch)){// 栈为空或不匹配if (st.empty() || st.top() != pairs[ch]){return false;}st.pop();}else // 左括号入栈{st.push(ch);}}// 栈中是否还有没匹配的左括号return st.empty();}
private:static unordered_map<char, char> pairs;
};unordered_map<char, char> Solution::pairs
{{')','('},{']','['},{'}','{'}
};

http://www.lryc.cn/news/297228.html

相关文章:

  • 【目录】CSAPP的实验简介与解法总结(已包含Attack/Link/Architecture/Cache)
  • 【机器学习】数据清洗之识别缺失点
  • 【Vue】Vue基础入门
  • 正点原子-STM32通用定时器学习笔记(1)
  • Redis篇之redis是单线程
  • 随机MM引流源码PHP开源版
  • 【C++修行之道】(引用、函数提高)
  • 从零开始手写mmo游戏从框架到爆炸(十一)— 注册与登录
  • 【SpringBoot】Redis集中管理Session和自定义用户参数解决登录状态及校验问题
  • 【0256】揭晓pg内核中MyBackendId的分配机制(后端进程Id,BackendId)(二)
  • eclipse4.28.0版本如何安装FatJar插件
  • 查大数据检测到风险等级太高是怎么回事?
  • Leetcode 30天高效刷数据结构和算法 Day1 两数之和 —— 无序数组
  • Hair Tool for Blender3D
  • 【最详解】如何进行点云的凹凸缺陷检测(opene3D)(完成度80%)
  • 海外云手机——平台引流的重要媒介
  • 数据库-计算机三级学习记录-4DBAS功能概要设计
  • JVM-虚拟机栈
  • linux系统上tomcat简介以及安装tomcat
  • 树莓派的pip安装时候添加清华源
  • 共享网盘系统PHP源码
  • unity-ios-解决内购商品在Appstore上面已配置,但在手机测试时却无法显示的问题
  • flask的基本使用 token插件(二)
  • 云计算、Docker、K8S问题
  • 【Iceberg学习二】Branch和Tag在Iceberg中的应用
  • 在 Blazor WASM 中手撸一个.NET MD5类
  • MFC实现遍历系统进程
  • 【C语言】深入理解指针
  • Excel——有效性、二级菜单联动
  • 计算机网络总结