LeetCode日常-简单-20-有效的括号
本文最后更新于:2021年4月29日 上午
题目
给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
自解
1 |
|
思路
如果是合理的字符组合(不为空)。
那么这个字符串只有两种情况:
- 字符串长度>0, 且必定存在必定存在子串’{}’或’()’或’[]’
这种情况下,对子串’{}’或’()’或’[]’进行去除,能得到缩小了的同问题。
不断重复去除的过程最终能使字符串长度==0. - 字符串长度==0
时间复杂度:O(n²)
官方解法
1 |
|
时间复杂度:O(n)O(n)O(n),因为我们一次只遍历给定的字符串中的一个字符并在栈上进行 O(1)O(1)O(1) 的推入和弹出操作。
算法
- 初始化栈 S。
- 一次处理表达式的每个括号。
- 如果遇到开括号,我们只需将其推到栈上即可。这意味着我们将稍后处理它,让我们简单地转到前面的 子表达式。
- 如果我们遇到一个闭括号,那么我们检查栈顶的元素。如果栈顶的元素是一个 相同类型的 左括号,那么我们将它从栈中弹出并继续处理。否则,这意味着表达式无效。
- 如果到最后我们剩下的栈中仍然有元素,那么这意味着表达式无效。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!