给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串

示例 1:

输入: “()”
输出: true

示例 2:

输入: “()[]{}”
输出: true

方法一:
遇到左括号,压栈
遇到右括号,弹栈

bool isValid(string s) {if(s.length() == 0) return true;stack<char> S;for (int i = 0;i < s.length(); ++i) {switch(s[i]) {case ')':{if(!S.empty()) {if(S.top() == '('){S.pop();} else {return false;}}else {return false;}break;}case ']':{if(!S.empty()) {if(S.top() == '['){S.pop();} else {return false;}}else {return false;}break;                    }case '}':{if(!S.empty()) {if(S.top() == '{'){S.pop();} else {return false;}}else {return false;}break;                    }case '(':{S.push(s[i]);break;}case '[':{S.push(s[i]);break;}case '{':{S.push(s[i]);break;}}}if (S.size() != 0) {return false;}return true;
}

方法二:
同样的思路,优化代码逻辑,使用map建立括号之间的映射关系

bool isValid(string s) {map<char,int> m{{'(',1},{'[',2},{'{',3},{')',4},{']',5},{'}',6}};stack<char> st;bool res=true;for(char c:s){int flag=m[c];if(flag>=1&&flag<=3) st.push(c);else if(!st.empty()&&m[st.top()]==flag-3) st.pop();else {res=false;break;}}if(!st.empty()) res=false;return res;
}

leetcode-20 有效的括号匹配相关推荐

  1. 算法训练Day11|LeetCode 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

    题目链接:20. 有效的括号 第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false 第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字 ...

  2. 【Java】LeetCode 20 有效的括号 (运用数据结构:栈 解题)

    题目: 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 解题 ...

  3. LeetCode 20. 有效的括号(Valid Parentheses)

    栈思想 关于有效括号表达式的一个有趣属性是有效表达式的子表达式也应该是有效表达式. 整个表达式是有效的,而它的子表达式本身也是有效的.这为问题提供了一种递归结构.(栈思想) 从整体表达式中一次删除一个 ...

  4. LeetCode 20. 有效的括号 golang(三)

    20. 有效的括号 这个题做了三次,前两次的解法现在觉得是算不得正确的. 看的多写得少 做的多总结少 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有 ...

  5. LeetCode 20. 有效的括号(栈)

    文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭 ...

  6. leetcode 20. 有效的括号

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...

  7. LeetCode 20 有效的括号

    https://leetcode-cn.com/problems/valid-parentheses/ 解决方案 class Solution {public boolean isValid(Stri ...

  8. LeetCode 堆栈队列 —— 括号匹配(20、232、155)

    1. 堆栈(stack) 20,20. Valid Parentheses,括号匹配,堆栈(python 中使用 list 即可实现表示堆栈,list.append:入栈,list.pop():出栈) ...

  9. 【LeetCode笔记】20.有效的括号(Java、栈) 21. 合并两个有序链表(Java)

    文章目录 20. 题目描述 & 解题 21. 题目描述 & 解题 1. 一开始的写法 2. 参考大佬的写法 两道简单类型连着,就直接一起写了. 20. 题目描述 & 解题 括号 ...

  10. 【LeetCode】【HOT】20. 有效的括号(栈)

    [LeetCode][HOT]20. 有效的括号 文章目录 [LeetCode][HOT]20. 有效的括号 package hot;import java.util.Deque; import ja ...

最新文章

  1. 【Spring框架家族】SpringBoot基本介绍
  2. 群晖使用Linux命令,群晖常用指令
  3. 为什么python这么火_Python为什么这么火?你了解多少呢?
  4. 谈谈SQL Server高可用的常见问题
  5. python web server_Python实现简易版的Web服务器(推荐)
  6. python快递费用计算_[Python]简单用Python写个查询快递的程序最后附源代码
  7. Redis笔记之基本数据结构 链表
  8. python设置黑色主题_Python背景色与语法高亮主题配置
  9. 代码测试:简单用户注册信息验证
  10. Leetcode 53.最大子序列和
  11. 179 Largest Number 把数组排成最大的数
  12. linux关机方法有哪些?有何区别_茅台酒都有哪些容量?一升装的与一斤装的到底有何区别?...
  13. SpringBoot开发的java后台管理系统
  14. 【1】嵌入式TCP/IP协议——————Art-Net调试工具 DMX-Workshop
  15. 基于asp.net大学生就业管理系统#毕业设计
  16. 以太网帧的目的地址从哪里来?
  17. 【影像配准】配准之棋盘网格图(镶嵌图像)(附有 C++ 代码)
  18. vue_drf之视频接口
  19. 《C++ Primer》读书笔记——第十三章_拷贝控制
  20. 如何在Tableau Desktop中创建自定义调色板 - 优阅达

热门文章

  1. 使用 Sticky-Kit 实现基于 jQuery 的元素固定效果
  2. 为 Asp.net 网站新增发送手机短信功能
  3. IOS成长之路-NSMutableURLRequest实现Post请求
  4. JavaScript深拷贝Json
  5. 关于创建zeromq消息队列,设置和更改IP地址,远程可以访问,不只是本地链接。python代码。
  6. 不允许使用抽象类类型的对象怎么办_Java基础——面试官:你来说说抽象类和接口的区别...
  7. java中字符串后加Box_PDFBox添加多行文档
  8. 山东财经大学东方学院有计算机吗,山东财经大学东方学院大一上学期计算机基础期中考试试题...
  9. java tooltips_一款使用纯javacript编写的轻量级tooltips工具
  10. php yii2支付宝开发,yii2 支付宝支付教程 [ 2.0 版本 ]