【每天一题】LeetCode 0020. 有效的括号

开源地址: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. 有效的括号的更多相关文章
- LeetCode:有效的括号【20】
		
LeetCode:有效的括号[20] 题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. ...
 - LeetCode    Generate Parentheses  构造括号串(DFS简单题)
		
题意: 产生n对合法括号的所有组合,用vector<string>返回. 思路: 递归和迭代都可以产生.复杂度都可以为O(2n*合法的括号组合数),即每次产生出的括号序列都保证是合法的. ...
 - LeetCode 刷题笔记  2. 有效的括号(Valid Parentheses)
		
tag: 栈(stack) 题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须 ...
 - Leetcode题库——20.有效的括号
		
@author: ZZQ @software: PyCharm @file: IsValid.py @time: 2018/9/16 20:20 要求: 给定一个只包括 '(',')','{','}' ...
 - leetcode第32题:最长有效括号
		
关于括号匹配或生成的问题,首先想到的是栈. 本题易错点:返回值为连续有效()的长度, 即()(()这种情况下,返回值为2 # 去除字符串首的连续)和字符串尾得连续( while True: if no ...
 - C#LeetCode刷题之#20-有效的括号(Valid Parentheses)
		
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4018 访问. 给定一个只包括 '(',')','{','}',' ...
 - [LeetCode] Generate Parentheses 生成括号
		
Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...
 - [LeetCode] Valid Parentheses 验证括号
		
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...
 - [LeetCode] Score of Parentheses 括号的分数
		
Given a balanced parentheses string S, compute the score of the string based on the following rule: ...
 
随机推荐
- 洛谷P3951 小凯的疑惑 - 数学 /扩展欧几里得
			
传送门 题意:求出a和b不能通过线性组合(即n*a+m*b)得到的最大值: 思路:摘自洛谷: 不妨设 a<b 假设答案为 x 若 x≡m*a ( mod b )(1≤m≤b−1) (mod3)什 ...
 - CodeForces 592D Super M  DP
			
Super M 题解: 定义 dp[u][0] 为遍历完u中的所有节点, 但不回到u点的路径花费值. 定义 dp[u][1] 为遍历完u中的所有节点, 且要回到u点的路径花费值. 转移方程. dp[u ...
 - yzoj P1412 & 洛谷P1629 邮递员送信 题解
			
有一个邮递员要送东西,邮局在结点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要一定的时间.这个邮递员每次只能带一 ...
 - window对象,BOM,window事件,延时器,DOM
			
01.定时器补充 function fn(){ console.log(1);}setInterval("fn()",100); //定时器调用匿名函数/* funct ...
 - js中数组方法大全
			
js数组方法大全 一:前言 我们在学到js中数组的时候,我们会接触到js中数组的一些方法,这些方法对我们来说,可以很遍历的达到我们想要的结果,但是因为方法比较多,有些方法也不常用,可能会过一段时间就会 ...
 - CCPC桂林
			
在得知我们队伍前往桂林参加CPPC区域赛后,我是非常激动的,因为我们网络赛并没有得到名额,如果不是新都赠予我们名额,我们都没有出去打比赛的机会,同时,我们也不想浪费这个名额,我们也想打出成绩来,于是我 ...
 - 菜鸟 ssm 框架的学习之路
			
跟着老师学习了两个月的java语言,现在学习到了框架的部分,一直想在博客上写点东西的,只是自己一直没有时间,其实到底也是懒,鲁迅说过:"时间就像海绵里的水,只要愿意去挤还是有的", ...
 - charles 禁用Cookies /Block Cookies Settings
			
本文参考:charles 禁用Cookies 禁用cookies/Block Cookies Settings 功能:阻止发送和接收Cookie 禁用Cookie工具 禁用Cookie工具阻止发送和接 ...
 - charles 设置为chrome代理
			
本文参考:charles 设置为chrome代理 将charles设置为chrome的代理 需要注意的是,Chrome 和 Firefox 浏览器并不一定使用的就是本机,可能是一些代理工具,而 Cha ...
 - DirectX12 3D 游戏开发与实战第一章内容
			
DirectX12 3D 第一章内容 学习目标 1.学习向量在几何学和数学中的表示方法 2.了解向量的运算定义以及它在几何学中的应用 3.熟悉DirectXMath库中与向量有关的类和方法 1.1 向 ...