更多精彩文章持续更新,微信搜索「代码随想录」第一时间围观,本文https://github.com/youngyangyang04/TechCPP 已经收录,里面有更多干货等着你,欢迎Star!

题目地址

https://leetcode-cn.com/problems/valid-parentheses/

思路

括号匹配是使用栈解决的经典问题。

题意其实就像我们在写代码的过程中,要求括号的顺序是一样的,有左括号,响应的位置必须要有右括号,如果还记得编译原理的话,编译器在 词法分析的过程中处理 括号,花括号等这个符号的逻辑,也是使用了栈这种数据结构。

所以栈在计算机领域中应用是非常广泛的。 有的同学可以经常会想学的这些数据结构有什么用,也开发不了什么软件,大多数同学说的软件应该都是可视化的软件例如APP之类的,那都是非常上层的应用了,底层很多功能的实现都是基础的数据结构和算法。 这里我就不过多展开了,我们先来看题。

由于栈结构的特殊性,非常适合做对称匹配类的题目。首先我们要弄清楚,字符串里的括号不匹配有几种情况。

一些同学,在面试中看到这种题目上来就开始写代码,建议要写代码之前要分析好有哪几种不匹配的情况,如果不动手之前分析好,写出的代码也会有很多问题。 会给面试官留下不好的印象。

我们先来分析一下 这里有三种不匹配的情况,

第一种情况,字符串里左方向的括号多余了 ,所以不匹配。
第二种情况,括号没有多余,但是 括号的类型没有匹配上。
第三种情况,字符串里右方向的括号多余了,所以不匹配。

我们的代码只要覆盖了这三种不匹配的情况,基本就不会出问题,可以看出 动手之前分析好题目的重要性。

接下来我们来看一下代码。

C++代码

class Solution {
public:bool isValid(string s) {stack<int> 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(']');// 第三种情况 是遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号 return false// 第二种情况 遍历字符串匹配的过程中,发现栈里没有我们要匹配的字符。所以return falseelse if (st.empty() || st.top() != s[i]) return false;else st.pop(); // st.top() == s[i]}// 第一种情况 此时我们已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false,否则就return truereturn st.empty();}
};

更过算法干货文章持续更新,可以微信搜索「代码随想录」第一时间围观,关注后,回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等,就可以获得我多年整理的学习资料。

「leetcode」C++题解:20. 有效的括号,括号匹配是使用栈解决的经典问题相关推荐

  1. 消除左递归实验代码_「leetcode」108. 构造二叉搜索树【递归】【迭代】详解!

    构造二叉搜索树,一不小心就平衡了 ❞ 108.将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树 ...

  2. 现有模型还「不懂」自然语言:20多位研究者谈NLP四大开放性问题

    https://www.toutiao.com/a6649234323549454856/ 2019-01-22 16:25:07 在由 DeepMind 主办的 Deep Learning Inda ...

  3. js实现kmp算法_「leetcode」459.重复的子字符串:KMP算法还能干这个!

    不瞒你说,重复子串问题,KMP很拿手 题目459.重复的子字符串 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: ...

  4. 消除左递归c++代码_「leetcode」129. 求根到叶子节点数字之和【递归中隐藏着回溯】详解...

    链接 https://leetcode-cn.com/problems/sum-root-to-leaf-numbers/ 思路 本题和113.路径总和II是类似的思路,做完这道题,可以顺便把113. ...

  5. 二维数组删除_「leetcode」数组:总结篇!(一文搞懂数组题目)

    数组理论基础 数组是非常基础的数据结构,在面试中,考察数组的题目一般在思维上都不难,主要是考察对代码的掌控能力 也就是说,想法很简单,但实现起来 可能就不是那么回事了. 首先要知道数组在内存中的存储方 ...

  6. 消除左递归实验代码_「leetcode」669. 修剪二叉搜索树:【递归】【迭代】详解!

    单纯移除一个节点那还不够,要修剪! ❞ 669. 修剪二叉搜索树 题目链接:https://leetcode-cn.com/problems/trim-a-binary-search-tree/ 给定 ...

  7. 「SDOI2016」征途 题解

    「SDOI2016」征途 先浅浅复制一个方差 显然dp,可以搞一个

  8. LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配

    #2006. 「SCOI2015」小凸玩矩阵 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 小 ...

  9. 「leetcode」最强回溯算法总结篇!历时21天、画了20张树形结构图、14道精选回溯题目精讲

    本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略.各个类型经典题目刷题顺序.思维导图,可以fork ...

  10. 「leetcode」332.重新安排行程【回溯算法/深搜】详细图解!

    本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略.各个类型经典题目刷题顺序.思维导图,可以fork ...

最新文章

  1. 递归计算Linux目录中的文件
  2. Xamarin.iOS编译出错
  3. Spring IOC 注入方式
  4. php 匹配一次,PHP Regex匹配最后一次出现的字符串
  5. Linux怎么对当前目录提权,linux提权方法(不断总结更新)
  6. 加载tensorflow模型后只运行变量名实现预测(sess.run)
  7. java chars_Java getChars() 方法 - Java 基础教程
  8. 二叉树的迭代统一写法
  9. 视频处理简单实例 [OpenCV 笔记2]
  10. 地大计算机历年分数线,中国地质大学武汉历年分数线 2021中国地质大学武汉录取分数线...
  11. 算法学习笔记(5) 传递闭包
  12. 第一章 绪论 1.2 时域采样定理及其应用
  13. linux177端口怎么打开,AIX5.3,如何使用xmanager管理?177端口打不开的相关推荐_ChinaUnix论坛...
  14. 202.Wex5开发环境的安装与基本使用 2019.08.29
  15. 经颅电刺激促进睡眠振荡及其功能耦合增强轻度认知障碍患者的记忆巩固
  16. 青少年ADHD双通路模型的神经相关性
  17. matlab中de 乘法符号,FPGA 中的有符号数乘法
  18. 计算机注销命令,电脑的注销命令是什么?
  19. 不考研也有出路?教育部重要通知,事关第二学士学位!
  20. 海思U盘识别失败的解决方法

热门文章

  1. 12_电话拨号器_界面实现
  2. C#枚举中使用Flags特性
  3. linux查看进程命令,linux查询指定进程命令
  4. 读写分离MYSQL类
  5. checkbox是否被选中
  6. HDU4641 || 6194多校 (后缀自动机-最少出现K次的字串个数 || 恰好出现K次字符串的个数)...
  7. Tkinter 的 Text 组件
  8. Codeforces 396C
  9. 查询英语单词 - 有道官方(一)
  10. java之SpringMVC配置!配置!配置!