开源地址:https://github.com/jiauzhang/algorithms


题目

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

示例

/*
* 示例 1:
* 输入: "()"
* 输出: true
*
* 示例 2:
* 输入: "()[]{}"
* 输出: true
*
* 示例 3:
* 输入: "(]"
* 输出: false
*
* 示例 4:
* 输入: "([)]"
* 输出: false
*
* 示例 5:
* 输入: "{[]}"
* 输出: true
*/

解题思路

/*
* 1. 有效括号肯定都是成对出现的,如果一个字符串是有效的
* 那么最外侧的括号括起来的子字符串一定也是有效的
* 即原问题可分解为子问题
* 2. 如果反过来想,那么最内层的一定也是有效的,而且是紧挨着的
* 例如 {[()]}, 如果把这个字符串逐个压入栈中,那么我们先
* 接收到的是开括号,后接收到的是闭括号,这就是为什么程序中
* open_close 的映射关系是反着写的
* 3. 当接收到最内层时,紧接着就是最内层的闭括号,依次到最外层
* 当此时逐个消去时候,情况如下
* {[( --> {[() --> {[ --> {[] --> { --> {} --> empty
*/

示例代码

class Solution {
public:
bool isValid(string s) {
if (s.size() == 0)
return true; stack<char> stk;
unordered_map<char, char> open_close = {
{')', '('},
{'}', '{'},
{']', '['}
}; for (int i=0; i<s.size(); i++) {
if (stk.size() == 0) {
stk.push(s[i]);
} else if (stk.top() == open_close[s[i]]) {
stk.pop();
} else {
stk.push(s[i]);
}
} return (stk.size() == 0);
}
};

【每天一题】LeetCode 0020. 有效的括号的更多相关文章

  1. LeetCode:有效的括号【20】

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

  2. LeetCode Generate Parentheses 构造括号串(DFS简单题)

    题意: 产生n对合法括号的所有组合,用vector<string>返回. 思路: 递归和迭代都可以产生.复杂度都可以为O(2n*合法的括号组合数),即每次产生出的括号序列都保证是合法的. ...

  3. LeetCode 刷题笔记 2. 有效的括号(Valid Parentheses)

    tag: 栈(stack) 题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须 ...

  4. Leetcode题库——20.有效的括号

    @author: ZZQ @software: PyCharm @file: IsValid.py @time: 2018/9/16 20:20 要求: 给定一个只包括 '(',')','{','}' ...

  5. leetcode第32题:最长有效括号

    关于括号匹配或生成的问题,首先想到的是栈. 本题易错点:返回值为连续有效()的长度, 即()(()这种情况下,返回值为2 # 去除字符串首的连续)和字符串尾得连续( while True: if no ...

  6. C#LeetCode刷题之#20-有效的括号(Valid Parentheses)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4018 访问. 给定一个只包括 '(',')','{','}',' ...

  7. [LeetCode] Generate Parentheses 生成括号

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  8. [LeetCode] Valid Parentheses 验证括号

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  9. [LeetCode] Score of Parentheses 括号的分数

    Given a balanced parentheses string S, compute the score of the string based on the following rule: ...

随机推荐

  1. Codeforces 374 C Inna and Dima (DFS)

    Inna and Dima 题意:从图上的任意一个D点按着DIMADIMA的顺序走,问一共可以经过多少个DIMA,如果经过0个DIMA就输出“Pool DIma!“,如果可以有无数多个DIMA就输出” ...

  2. 天梯杯 PAT L2-001. 紧急救援 最短路变形

    作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市有紧急求 ...

  3. Fedora7 安装完全过程

    操作系统课要用Fedora7 安装配置真是一把辛酸泪呀..... 首先是找镜像文件(这个就找了好久.....): https://archives.fedoraproject.org/pub/arch ...

  4. 从SpringBoot构建十万博文聊聊Tomcat集群监控

    前言 在十万博文终极架构中,我们使用了Tomcat集群,但这并不能保证系统不会出问题,为了保证系统的稳定运行,我们还需要对 Tomcat 进行有效的运维监控手段,不至于问题出现或者许久一段时间才知道. ...

  5. VScode神器如何同步配置和所装插件

    由于近期编辑器换用vscode,回到家里也需要写代码,但是家里电脑也需要安装vscode,并设置相同配置和插件.想到以前webstrom可以直接导出配置然后安装. 但是vscode无此配置,突发奇想g ...

  6. JS-特效 ~ 01. 事件对象、offset偏移/检测、无缝滚动、自动循环轮播图

    Math.round ( ) :正书四舍五入,负数五舍六入 用定时器,先清除定时器 事件对象 event event:事件被触动时,鼠标和键盘的状态,通过属性控制 Offset:偏移,检测 1. 获取 ...

  7. 一次使用scrapy的问题记录

    前景描述: 需要获取某APP的全国订单量,及抢单量.由于没有全国的选项所以只能分别对每一个城市进行订单的遍历.爬虫每天运行一次,一次获取48小时内的订单,从数据库中取出昨天的数据进行对比,有订单被抢则 ...

  8. 六星教育php vip视频(分享)

    最近看的一个swoole的课程,应该也算是vip课程了,不是公开的直播课 比较有特点有一定深度,swoole的实战教程一直也不多,结合swoole构建一个新型框架,最后讲解如何实现分布式RPC的调用. ...

  9. AirFlow常用命令

    airflow常用命令如下所示: airflow test dag_id task_id execution_date 测试task 示例: airflow test example_hello_wo ...

  10. Elastic Stack 笔记(一)CentOS7.5 搭建 Elasticsearch5.6 集群

    博客地址:http://www.moonxy.com 一.前言 Elasticsearch 是一个基于 Lucene 的分布式搜索引擎服务,采用 Java 语言编写,使用 Lucene 构建索引.提供 ...