题号20:Invalid Parentheses

Given a string containing just the characters '('')''{''}''[' and ']', determine if the input string is valid.

An input string is valid if:

  1. Open brackets must be closed by the same type of brackets.
  2. Open brackets must be closed in the correct order.

Note that an empty string is also considered valid.

Example 1:

Input: "()"
Output: true

Example 2:

Input: "(]"
Output: false

算法

  1. 初始化栈 S。
  2. 一次处理表达式的每个括号。
  3. 如果遇到开括号,我们只需将其推到栈上即可。这意味着我们将稍后处理它,让我们简单地转到前面的 子表达式
  4. 如果我们遇到一个闭括号,那么我们检查栈顶的元素。如果栈顶的元素是一个相同类型的左括号,那么我们将它从栈中弹出并继续处理。否则,这意味着表达式无效。
  5. 如果到最后我们剩下的栈中仍然有元素,那么这意味着表达式无效。

复杂度分析

  • 时间复杂度: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)相关推荐

  1. Leetcode 最小栈问题

    今天在Leetcode刷了一道关于最小栈的问题,题目如下: 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) – 将元素 x 推入栈中. pop() ...

  2. 【LeetCode之栈和队列】:关于栈和队列经典的OJ题(用C语言实现,附图详解)

    LeetCode题目 1.括号匹配问题 2.用队列实现栈 3.用栈实现队列 4.设计循环队列 1.括号匹配问题 LeetCode链接: [20. 有效的括号] 这道题就是经典的利用栈解决问题的例子:思 ...

  3. LeetCode——最小栈

    题目描述: 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- 删除栈顶的元素. top() -- ...

  4. 玩转算法之面试-第六章(栈和队列)

    leetcode 20 此时栈顶的左括号和当前遍历的右括号匹配,故将左括号从栈顶pop出. leetcode 150: leetcode 71 栈和递归的关系 递归算法:二叉树中的算法 .二叉树的前序 ...

  5. 栈和深度优先搜索(DFS)

    与 BFS 类似,深度优先搜索(DFS)是用于在树/图中遍历/搜索的另一种重要算法.也可以在更抽象的场景中使用. 正如树的遍历中所提到的,我们可以用 DFS 进行 前序遍历,中序遍历 和 后序遍历.在 ...

  6. JavaScript刷LeetCode拿offer-经典高频40题

    工作太忙没有时间刷算法题,面试的时候好心虚.这里双手奉上40道LeetCode上经典面试算法题,整理的内容有点长,建议先收藏,慢慢消化,在来年顺利拿到满意的offer. 1.[LeetCode] 两数 ...

  7. 链表和树的leetcode题

    基础新手 链表 注意事项 注意保存上下文环境.注意gc,不要有垃圾变量.换头结点注意考虑头 对于链表不要在乎是O(n)还是O(2n) 长短链表互换 习题 K个节点的组内逆序调整 ? leetcode: ...

  8. C++ 内存对齐 及 引用是否真的节省内存的一点思考

    文章目录 1. 内存对齐 2. 递归中的内存对齐 3. C++引用的本质 4. 致谢 1. 内存对齐 通过以下语句,获取变量的占用内存打下: cout << "size of i ...

  9. LeetCode简单题之用栈操作构建数组

    题目 给你一个目标数组 target 和一个整数 n.每次迭代,需要从 list = {1,2,3-, n} 中依序读取一个数字. 请使用下述操作来构建目标数组 target : Push:从 lis ...

最新文章

  1. SpringBoot引用lombok让代码更简洁
  2. jQuery方法position()与offset()区别
  3. cxgrid主从表 点+号展开_深入理解Redis主从复制
  4. oracle的获取年月日时间,获取5年前日期
  5. 手动实现Spring中的IOC容器
  6. DOCKERFILE参数注解
  7. linux用java连接mysql_Java使用JDBC方式连接数据库
  8. 软著申请时的软件说明书如何制作
  9. 下班老忘记打卡,在电脑上做一个定时下班打卡的弹窗
  10. openlayers入门开发系列之热力图篇
  11. 【报告分享】阿里妈妈:熬夜真相-0点经济报告.pdf(附下载链接)
  12. 架构师入门知识体系树
  13. matlab定义和调用函数m,Matlab学习-自定义函数与调用
  14. 从IBM的计划中分析出中国重新相当然的错误选择吗
  15. mib节点 snmp trap_浅谈 Linux 系统中的 SNMP Trap
  16. 样本标准差分母为何是n-1
  17. 实战ItemTouchHelper仿网易新闻客户端自定义栏目页面
  18. cogs2235 烤鸡翅 贪心
  19. 综艺真人秀势不可挡,互联网金融也要投广告?
  20. 灰狼优化算法--简单易懂附python代码

热门文章

  1. 清楚linux缓存文件,Linux删除文件 清除缓存
  2. .Net开发WebApi如何使用JObject对象接收参数
  3. java屏蔽编译告警_java-禁止JAXB生成的类上的编译器警告
  4. date比较大小 mybatis_Hibernate 和 MyBatis 哪个更好用?
  5. Oracle中计算两个时间的时间差:
  6. leetcode28. 实现 strStr()
  7. redis——实战点赞
  8. 约瑟夫环-(数组、循环链表、数学)
  9. C++(9)--裸指针、智能指针、引用
  10. 小米用户画像_企鹅智库:高学历用苹果中老年用华为 男性用小米女性用OV