leetcode练习——栈(1)
题号20:Invalid Parentheses
Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
An input string is valid if:
- Open brackets must be closed by the same type of brackets.
- Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.
Example 1:
Input: "()" Output: trueExample 2:
Input: "(]" Output: false
算法
- 初始化栈 S。
- 一次处理表达式的每个括号。
- 如果遇到开括号,我们只需将其推到栈上即可。这意味着我们将稍后处理它,让我们简单地转到前面的 子表达式。
- 如果我们遇到一个闭括号,那么我们检查栈顶的元素。如果栈顶的元素是一个相同类型的左括号,那么我们将它从栈中弹出并继续处理。否则,这意味着表达式无效。
- 如果到最后我们剩下的栈中仍然有元素,那么这意味着表达式无效。
复杂度分析
- 时间复杂度:O(n),因为我们一次只遍历给定的字符串中的一个字符并在栈上进行 O(1) 的推入和弹出操作。
- 空间复杂度:O(n),当我们将所有的开括号都推到栈上时以及在最糟糕的情况下,我们最终要把所有括号推到栈上。例如
((((((((((
。
static const auto _ = []()
{ios::sync_with_stdio(false);cin.tie(nullptr);return nullptr;
}();class Solution {
public:bool isValid(string s) {stack<char> stack;for (int i = 0; i < s.length(); i++){char tmp = s[i];if (tmp == '(' || tmp == '[' || tmp == '{')stack.push(tmp);else{if (stack.empty())return false;char topChar = stack.top();if (topChar == '(' && tmp != ')')return false;if (topChar == '{' && tmp != '}')return false;if (topChar == '[' && tmp != ']')return false;stack.pop();}}return stack.empty();}
};
leetcode练习——栈(1)相关推荐
- Leetcode 最小栈问题
今天在Leetcode刷了一道关于最小栈的问题,题目如下: 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) – 将元素 x 推入栈中. pop() ...
- 【LeetCode之栈和队列】:关于栈和队列经典的OJ题(用C语言实现,附图详解)
LeetCode题目 1.括号匹配问题 2.用队列实现栈 3.用栈实现队列 4.设计循环队列 1.括号匹配问题 LeetCode链接: [20. 有效的括号] 这道题就是经典的利用栈解决问题的例子:思 ...
- LeetCode——最小栈
题目描述: 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- 删除栈顶的元素. top() -- ...
- 玩转算法之面试-第六章(栈和队列)
leetcode 20 此时栈顶的左括号和当前遍历的右括号匹配,故将左括号从栈顶pop出. leetcode 150: leetcode 71 栈和递归的关系 递归算法:二叉树中的算法 .二叉树的前序 ...
- 栈和深度优先搜索(DFS)
与 BFS 类似,深度优先搜索(DFS)是用于在树/图中遍历/搜索的另一种重要算法.也可以在更抽象的场景中使用. 正如树的遍历中所提到的,我们可以用 DFS 进行 前序遍历,中序遍历 和 后序遍历.在 ...
- JavaScript刷LeetCode拿offer-经典高频40题
工作太忙没有时间刷算法题,面试的时候好心虚.这里双手奉上40道LeetCode上经典面试算法题,整理的内容有点长,建议先收藏,慢慢消化,在来年顺利拿到满意的offer. 1.[LeetCode] 两数 ...
- 链表和树的leetcode题
基础新手 链表 注意事项 注意保存上下文环境.注意gc,不要有垃圾变量.换头结点注意考虑头 对于链表不要在乎是O(n)还是O(2n) 长短链表互换 习题 K个节点的组内逆序调整 ? leetcode: ...
- C++ 内存对齐 及 引用是否真的节省内存的一点思考
文章目录 1. 内存对齐 2. 递归中的内存对齐 3. C++引用的本质 4. 致谢 1. 内存对齐 通过以下语句,获取变量的占用内存打下: cout << "size of i ...
- LeetCode简单题之用栈操作构建数组
题目 给你一个目标数组 target 和一个整数 n.每次迭代,需要从 list = {1,2,3-, n} 中依序读取一个数字. 请使用下述操作来构建目标数组 target : Push:从 lis ...
最新文章
- SpringBoot引用lombok让代码更简洁
- jQuery方法position()与offset()区别
- cxgrid主从表 点+号展开_深入理解Redis主从复制
- oracle的获取年月日时间,获取5年前日期
- 手动实现Spring中的IOC容器
- DOCKERFILE参数注解
- linux用java连接mysql_Java使用JDBC方式连接数据库
- 软著申请时的软件说明书如何制作
- 下班老忘记打卡,在电脑上做一个定时下班打卡的弹窗
- openlayers入门开发系列之热力图篇
- 【报告分享】阿里妈妈:熬夜真相-0点经济报告.pdf(附下载链接)
- 架构师入门知识体系树
- matlab定义和调用函数m,Matlab学习-自定义函数与调用
- 从IBM的计划中分析出中国重新相当然的错误选择吗
- mib节点 snmp trap_浅谈 Linux 系统中的 SNMP Trap
- 样本标准差分母为何是n-1
- 实战ItemTouchHelper仿网易新闻客户端自定义栏目页面
- cogs2235 烤鸡翅 贪心
- 综艺真人秀势不可挡,互联网金融也要投广告?
- 灰狼优化算法--简单易懂附python代码
热门文章
- 清楚linux缓存文件,Linux删除文件 清除缓存
- .Net开发WebApi如何使用JObject对象接收参数
- java屏蔽编译告警_java-禁止JAXB生成的类上的编译器警告
- date比较大小 mybatis_Hibernate 和 MyBatis 哪个更好用?
- Oracle中计算两个时间的时间差:
- leetcode28. 实现 strStr()
- redis——实战点赞
- 约瑟夫环-(数组、循环链表、数学)
- C++(9)--裸指针、智能指针、引用
- 小米用户画像_企鹅智库:高学历用苹果中老年用华为 男性用小米女性用OV