LeetCode 678. 有效的括号字符串(栈)
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. 有效的括号字符串(栈)相关推荐
- leetcode 678 有效的括号字符串
给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串.有效字符串具有如下规则: 任何左括号 ( 必须有相应的右括号 ). 任何右括号 ) 必须有相应的左括号 ( ...
- LeetCode 678 有效的括号字符串,常规栈思路
题:给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串.有效字符串具有如下规则: 任何左括号 ( 必须有相应的右括号 ). 任何右括号 ) 必须有相应的左括号 ...
- LeetCode 678. 有效的括号字符串
传送门:https://leetcode-cn.com/problems/valid-parenthesis-string 题目描述: 给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检 ...
- 678. 有效的括号字符串
678. 有效的括号字符串 给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串.有效字符串具有如下规则: 任何左括号 ( 必须有相应的右括号 ). 任何右括号 ...
- LeetCode 2116. 判断一个括号字符串是否有效(栈)
文章目录 1. 题目 2. 解题 1. 题目 一个括号字符串是只由 '(' 和 ')' 组成的 非空 字符串. 如果一个字符串满足下面 任意 一个条件,那么它就是有效的: 字符串为 (). 它可以表示 ...
- leetcode 678. Valid Parenthesis String | 678. 有效的括号字符串(带缓存的暴力递归)
题目 https://leetcode.com/problems/valid-parenthesis-string/ 题解 带缓存的暴力递归,非常挫.用一个 string 模拟 stack,方便缓存记 ...
- LeetCode 20. 有效的括号(栈)
文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭 ...
- LeetCode 1249. 移除无效的括号(栈+set / deque)
1. 题目 给你一个由 '('.')' 和小写字母组成的字符串 s. 你需要从字符串中删除最少数目的 '(' 或者 ')' (可以删除任意位置的括号),使得剩下的「括号字符串」有效. 请返回任意一个合 ...
- LeetCode 1021. 删除最外层的括号(栈)
文章目录 1. 题目 2. 解题 1. 题目 题目链接 示例 1:输入:"(()())(())" 输出:"()()()" 解释: 输入字符串为 "(( ...
最新文章
- python切片操作例题_Python之切片操作
- 不能导入android项目备注
- mock 测试 MVC
- 解开 Windows 下的临界区中的代码死锁(转)
- 好的PPT——准备工作
- UIButton、UIImageView、UILabel的选择
- 小度智能音响拆解 芯片_不拆不快:小度音箱拆解测评
- 美的集团:收购KUKA总价款为15亿欧元
- 嵌入式数据库与数据库服务器
- springboot 整合JWT token验证机制
- Unity2D入门(二)	优化玩家移动手感(一)
- 北理大编程作业:确定母亲节
- 【AI数学原理】函数求导(精髓篇)
- 免费图书的检索和获取途径
- close函数 qt_QT5笔记:关闭应用程序和窗口的函数
- 【力扣】买卖股票的最佳时机 II
- 华为服务体系:ITR流程体系详解
- UiBot If(如果条件成立)
- 【DKN】(五)attention.py
- 数据仓库面试题-初级
热门文章
- linux 进程通信 消息队列
- HI3559A和AI深度学习框架caffe
- c语言scanf附加格式*,C语言的scanf语句格式
- mimemultipart java_最佳实践 – 发送javamail mime multipart电子邮件和gmail
- 017-通过govendor管理依赖包
- swagger core 和 swagger ui 如何关联【窥探】
- What code you will get when you create a wcf library
- ThinkPHP(3.2)搭建简单留言板项目
- Cairngorm初学者入门教程 第六节--Cairngorm中Command利用Delegate与Service连接
- 使用python game写一个贪吃蛇游戏