传送门:https://leetcode-cn.com/problems/valid-parenthesis-string

题目描述:
给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:

1、 任何左括号 ( 必须有相应的右括号 )。
2、任何右括号 ) 必须有相应的左括号 ( 。
3、左括号 ( 必须在对应的右括号之前 )。
4、* 可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。
5、一个空字符串也被视为有效字符串。

示例 1:输入: "()"
输出: True
示例 2:输入: "(*)"
输出: True
示例 3:输入: "(*))"
输出: True注意:
字符串大小将在 [1,100] 范围内。

思路:

定义两个栈 left, star 分别储存左括号和星号的位置
开始遍历字符串,遇到左括号和星号的时候分别入栈,当遍历到右括号的时候,首先查看left是否为空,若不为空,left栈顶元素出栈;若为空,查看star是否为空,若不为空,star栈顶元素出栈(此时星号被当作是左括号),若为空,直接返回False。

遍历结束,检查left是否为空,若不为空,检查star是否为空,为空说明此时已经没有星号与左括号匹配,直接返回False。如果left的栈顶元素大于star的栈顶元素,说明星号在左括号的左边,不满足题目要求,直接返回False。否则,left栈顶元素出栈,star栈顶元素出栈。直到left为空,返回True。

class Solution:def checkValidString(self, s: str) -> bool:if s=="*":return Trueelse:left, star=[], []for i in range(len(s)):if s[i]=='(': left.append(i)elif s[i]=='*':star.append(i)elif s[i]==')':if left: left.pop()elif star:star.pop()else:return Falsewhile left:if len(star) == 0: return False elif left[-1] > star[-1]: return False else:left.pop()star.pop()return True

LeetCode 678. 有效的括号字符串相关推荐

  1. leetcode 678 有效的括号字符串

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

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

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

  3. LeetCode 678 有效的括号字符串,常规栈思路

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

  4. 678. 有效的括号字符串

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

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

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

  6. leetcode 678. Valid Parenthesis String | 678. 有效的括号字符串(带缓存的暴力递归)

    题目 https://leetcode.com/problems/valid-parenthesis-string/ 题解 带缓存的暴力递归,非常挫.用一个 string 模拟 stack,方便缓存记 ...

  7. LeetCode简单题之判断字符串的两半是否相似

    题目 给你一个偶数长度的字符串 s .将其拆分成长度相同的两半,前一半为 a ,后一半为 b . 两个字符串 相似 的前提是它们都含有相同数目的元音('a','e','i','o','u','A',' ...

  8. 括号字符串的有效性和最长有效长度

    题目 给定一个字符串str,判断是不是整体有效的括号字符串.例如,str = "()()()",返回True,str = "())" 或 "()a() ...

  9. Coding Interview Guide -- 括号字符串的有效性和最长有效长度

    [题目] 给定一个字符串str,判断是不是整体有效的括号字符串 举例,str = "()",返回true:str = "(()())",返回true:str = ...

最新文章

  1. 一分钟详解「本质矩阵」推导过程
  2. 在关联枚举中使用Codable
  3. 5000万用户数据泄露,大数据时代隐私保护困难重重
  4. Mac普通用户修改了/etc/sudoers文件的解决办法
  5. 一个快速、完善的Android开发框架整合实践(QuickAndroid)
  6. VTK:图片之ImageRotate
  7. c++ primer 5th p289页练习题自己的解答程序
  8. 解决Spring自动装配中的循环依赖
  9. 外架小横杆外露长度规范要求_安全文明施工规范
  10. 达摩院2020十大科技趋势发布:云成IT技术创新中心
  11. vuex mapstate_Vuex从使用到原理解析
  12. 苹果cms小主题模板
  13. 教孩子编程python 语言 nostarch 下载_教孩子学编程 Python语言版
  14. 漏洞补丁:windwos补丁下载(MS17-010)
  15. 8.5 向量应用(三)——知识补充和梳理(夹角、距离和平面束)
  16. IBM智慧存储厦门巡展发布Storwize RAS方案
  17. 广东高中生多少人_广东2016高考五大变化 考生总人数73.3万
  18. 【Android】多渠道打包与签名机制
  19. 不重不漏的分析方法:MECE分析法
  20. Process类介绍

热门文章

  1. LeetCode 1631. 最小体力消耗路径(DFS + 二分查找)
  2. LeetCode 1190. 反转每对括号间的子串(栈)
  3. LeetCode 103. 二叉树的锯齿形层次遍历(BFS / 双栈)
  4. canal mysql从库_canal中间件|数据增量同步解决方案
  5. java分治法求数列的最大子段和_Java十大经典排序算法动画解析和 代码实现
  6. python2转python3代码_2to3 – 自动Python 2到3代码翻译 – 开发工具(Python教程)(参考资料)...
  7. python中遇到循环import即circular import的问题原理剖析及解决方案
  8. Hadoop学习之整体介绍及环境搭建
  9. 最右显示请求服务器不存在,修改合流任务_实时音视频 RTC_服务端API参考_合流任务管理_华为云...
  10. 惊了,掌握了这个炼丹技巧的我开始突飞猛进