开源地址: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. 证书pfx转jks

    keytool -importkeystore -srckeystore  2756649_order.hanels-home.com.pfx -srcstoretype pkcs12 -destke ...

  2. 【百度之星】【java大数+C++做法】hdu 6719 Strassen

    代码:递归搜索一下.java大数做法 import java.util.*; import java.math.*; import java.security.MessageDigest; publi ...

  3. Trace 2018徐州icpc网络赛 思维+二分

    There's a beach in the first quadrant. And from time to time, there are sea waves. A wave ( xx , yy) ...

  4. Junit测试Controller(MockMVC使用),以及传输@RequestBody数据解决办法

    转自:http://www.importnew.com/21153.html 一.单元测试的目的 简单来说就是在我们增加或者改动一些代码以后对所有逻辑的一个检测,尤其是在我们后期修改后(不论是增加新功 ...

  5. 聚焦Python分布式爬虫必学框架Scrapy 打造搜索引擎视频教程

    下载链接:https://www.yinxiangit.com/595.html 目录: 第1章 课程介绍介绍课程目标.通过课程能学习到的内容.和系统开发前需要具备的知识 第2章 windows下搭建 ...

  6. NGUI_基础入门学习

    目录 1. Control Widgets 控制部件2. Anchors 锚3. Interaction 交互4. Menu 菜单5. Controller Input 控制器的输入6. Lights ...

  7. Anroid逆向学习从编写so到静动态调试分析arm的一次总结

    Anroid逆向学习从编写so到静动态调试分析arm的一次总结 一.前言 最近跟着教我兄弟学逆向这篇教程学习Android逆向,在第七课后作业反复折腾了好几天,正好在折腾的时候对前面的学习总结一波,动 ...

  8. cent OS 7 忘记 root 密码

    1. 在如下图, 选择系统的界面 按 e 2. 移动光标到文件底部, 修改如下两个地方(初始化 shell文件 并设置可读写), Ctrl x 退出并启动 shell 3. 如下界面 输入命令 mou ...

  9. 细谈Redis五大数据类型

    文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 上一篇文章有提到,Redis中使用最频繁的有5种数据类型:String.List.Hash.Set.SortS ...

  10. 【linux】【Zookeeper】Centos7安装Zookeeper-3.5.5

    一 .下载zookeeper wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5 ...