1. 题目

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

  • 任何左括号 ( 必须有相应的右括号 )。
  • 任何右括号 ) 必须有相应的左括号 ( 。
  • 左括号 ( 必须在对应的右括号之前 )。
  • * 可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。
  • 一个空字符串也被视为有效字符串。
示例 1:
输入: "()"
输出: True示例 2:
输入: "(*)"
输出: True示例 3:
输入: "(*))"
输出: True

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parenthesis-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 正反两次扫描

class Solution {public:bool checkValidString(string s) {int i, star = 0, left = 0, right = 0;for(i = 0; i < s.size(); ++i){if(s[i] == '(')left++;else if(s[i] == '*')star++;else if(s[i] == ')'){if(left)left--;else if(star)star--;elsereturn false;}}left = right = star = 0;for(i = s.size()-1; i >= 0; --i){if(s[i] == ')')right++;else if(s[i] == '*')star++;else if(s[i] == '('){if(right)right--;else if(star)star--;elsereturn false;}}return true;}
};

2.2 栈

两个栈,分别存储(*的下标

class Solution {public:bool checkValidString(string s) {stack<int> l;stack<int> star;for(int i = 0; i < s.size(); ++i){if(s[i] == '(')l.push(i);else if(s[i] == '*')star.push(i);else{if(l.empty() && star.empty())return false;//不够匹配if(!l.empty())l.pop();elsestar.pop();}}while(!l.empty() && !star.empty()){if(l.top() > star.top())// * ( 不能匹配return false;l.pop();star.pop();}return l.empty();}
};

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

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

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

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

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

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

    传送门:https://leetcode-cn.com/problems/valid-parenthesis-string 题目描述: 给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检 ...

  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 20. 有效的括号(栈)

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

  8. LeetCode 1249. 移除无效的括号(栈+set / deque)

    1. 题目 给你一个由 '('.')' 和小写字母组成的字符串 s. 你需要从字符串中删除最少数目的 '(' 或者 ')' (可以删除任意位置的括号),使得剩下的「括号字符串」有效. 请返回任意一个合 ...

  9. LeetCode 1021. 删除最外层的括号(栈)

    文章目录 1. 题目 2. 解题 1. 题目 题目链接 示例 1:输入:"(()())(())" 输出:"()()()" 解释: 输入字符串为 "(( ...

最新文章

  1. python切片操作例题_Python之切片操作
  2. 不能导入android项目备注
  3. mock 测试 MVC
  4. 解开 Windows 下的临界区中的代码死锁(转)
  5. 好的PPT——准备工作
  6. UIButton、UIImageView、UILabel的选择
  7. 小度智能音响拆解 芯片_不拆不快:小度音箱拆解测评
  8. 美的集团:收购KUKA总价款为15亿欧元
  9. 嵌入式数据库与数据库服务器
  10. springboot 整合JWT token验证机制
  11. Unity2D入门(二) 优化玩家移动手感(一)
  12. 北理大编程作业:确定母亲节
  13. 【AI数学原理】函数求导(精髓篇)
  14. 免费图书的检索和获取途径
  15. close函数 qt_QT5笔记:关闭应用程序和窗口的函数
  16. 【力扣】买卖股票的最佳时机 II
  17. 华为服务体系:ITR流程体系详解
  18. UiBot If(如果条件成立)
  19. 【DKN】(五)attention.py
  20. 数据仓库面试题-初级

热门文章

  1. linux 进程通信 消息队列
  2. HI3559A和AI深度学习框架caffe
  3. c语言scanf附加格式*,C语言的scanf语句格式
  4. mimemultipart java_最佳实践 – 发送javamail mime multipart电子邮件和gmail
  5. 017-通过govendor管理依赖包
  6. swagger core 和 swagger ui 如何关联【窥探】
  7. What code you will get when you create a wcf library
  8. ThinkPHP(3.2)搭建简单留言板项目
  9. Cairngorm初学者入门教程 第六节--Cairngorm中Command利用Delegate与Service连接
  10. 使用python game写一个贪吃蛇游戏