题目

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

有效字符串需满足:

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

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

示例 1:

输入: “()”
输出: true

示例 2:

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

示例 3:

输入: “(]”
输出: false

示例 4:

输入: “([)]”
输出: false

示例 5:

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

思路

空字符串可被认为是有效字符串;

而对于非空字符串,被判断为有效字符串的条件是括号都按相应顺序和类别互相匹配。因此,可以利用一个先进后出的栈,保存左括号的顺序和类别,从而按顺序进行左右括号两两配对,以判断括号的有效性。

算法描述如下:

  1. 字典d1保存右括号对应的左括号类型,d2用于判断括号为左括号还是右括号
  2. 利用栈来判断括号的闭合顺序
  3. 对于字符串中的每一个元素,进行4,5,6操作
  4. 首先判断是左括号还是右括号
  5. 对于右括号,分情况判断:
    a. 若此时栈为空,则不符合括号闭合顺序,判定为无效的括号,跳到操作8
    b. 若栈不为空,且当前栈顶元素为右括号对应的左括号,配对成功,将该左括号移出栈
    c. 若栈不为空,且当前栈顶元素不是右括号对应的左括号,则配对不成功,判定为无效的括号,跳到操作8
  6. 对于左括号,直接压栈操作
  7. 若遍历完所有元素以后,栈为空,则说明括号都按相应顺序和类别,两两配对完了,则括号有效,跳到操作8
  8. 输出判定结果

解答

class Solution:def isValid(self, s):""":type s: str:rtype: bool"""d1 = { ')':'(',  '}':'{', ']':'['}d2 = {'(': 1, ')': -1, '{': 1, '}': -1, '[': 1, ']': -1}stack = []isValid = Falsei = 0while i < len(s):if d2[s[i]] == -1:if stack == []:breakelif d1[s[i]] == stack[-1]:stack.pop()else:breakif d2[s[i]] == 1:stack.append(s[i])i+=1;if i == len(s) and stack == []:isValid = Truereturn isValid

【Leetcode | easy】有效的括号相关推荐

  1. leetcode easy problem set

     *勿以浮沙筑高台* 持续更新........     题目网址:https://leetcode.com/problemset/all/?difficulty=Easy 1. Two Sum [4m ...

  2. LeetCode 2116. 判断一个括号字符串是否有效(栈)

    文章目录 1. 题目 2. 解题 1. 题目 一个括号字符串是只由 '(' 和 ')' 组成的 非空 字符串. 如果一个字符串满足下面 任意 一个条件,那么它就是有效的: 字符串为 (). 它可以表示 ...

  3. LeetCode 678. 有效的括号字符串(栈)

    1. 题目 给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串.有效字符串具有如下规则: 任何左括号 ( 必须有相应的右括号 ). 任何右括号 ) 必须有相应 ...

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

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

  5. 秋招算法字符串专场leetcode(Easy十六题)

    字符串专场 459. 重复的子字符串 1-给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1:输入: "ab ...

  6. Leetcode 1096:花括号展开 II(超详细!!!)

    如果你熟悉 Shell 编程,那么一定了解过花括号展开,它可以用来生成任意字符串. 花括号展开的表达式可以看作一个由 花括号.逗号 和 小写英文字母 组成的字符串,定义下面几条语法规则: 如果只给出单 ...

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

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

  8. LeetCode Valid Parentheses(判断括号是否匹配)

    题意:给出(,[,{,),],}括号组成的字符串, 判断括号是否匹配 思路:用栈结构判断 1.如果是(,[,{,将其入栈 2.如果遇到),],},看栈是否为空.栈顶元素是否对应为(,[,{ 3.将字符 ...

  9. 【Leetcode | easy】两数之和

    题目 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], targ ...

最新文章

  1. jiebaR中文分词,从入门到喜欢
  2. Java项目经验——程序员成长的关键
  3. Netty @Sharable的使用
  4. socket开发中INADDR_ANY的含义是什么?
  5. arm opcode hook
  6. Beego 学习笔记9:Boostrap使用介绍
  7. coreldraw x4如何重叠图片_CorelDRAW复制及镜面反转对象
  8. Powershell 自定义对象小技巧
  9. 大数据分析平台具备怎样的功能
  10. 转换成XmlDocument
  11. skype国际版android,Skype国际版
  12. 调试技巧(Debugging)
  13. 自从看了<<麦肯锡的领导力法则>>之后......
  14. 风寒感冒和风热感冒 区别
  15. 微分方程建模实例:对药剂量开处方
  16. Ciphertext-Policy Attribute-Based Encryption (CP-ABE) Toolkit Installation
  17. 耗时五个月的项目实训——影行App
  18. 使用DiskGenius扩展C盘大小,遇见“您选择的分区不支持无损调整容量”
  19. WordPress让插件随主题一同启用
  20. maven archetype 自定义

热门文章

  1. Python入门学习笔记13(线程锁与信号量)
  2. Dell 笔记本的 BIOS设置 USB Wake Support 的设置
  3. 'Push segues can only be used when the source controller is managed by an instance of UINavigationC
  4. Android ----制作自己的Vendor
  5. 加密和解密.net配置节
  6. wse2.0实现webservice安全(转)
  7. ArrayList add(int index,E element)
  8. java数组之binarySearch查找
  9. Android 5.0 Lollipop介绍
  10. Ffmpeg 定位文件(seek file)