有效的括号(十二)
一、题目描述
这是 LeetCode 热题 HOT 100 上第二十题:有效的括号,难度为 简单。
Tag:「栈」、「字符串」、「哈希表」
给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1、左括号必须用相同类型的右括号闭合。
2、左括号必须以正确的顺序闭合。
3、每个右括号都有一个对应的相同类型的左括号。
示例 1:
1 |
|
示例 2:
1 |
|
示例 3:
1 |
|
提示:
1、1 <= s.length <= 104
2、s
仅由括号 '()[]{}'
组成
二、解题思路
1)、这道题我们使用栈 + 哈希表能够快速的解决问题
2)、如果 c 是左括号,则入栈 push;否则通过哈希表判断括号对应关系,若 stack 栈顶出栈括号 stack.pop() 与当前遍历括号 c 不对应,则提前返回 false。
3)、在迭代过程中,提前发现不符合的括号并且返回,提升算法效率
4)、解决边界问题
1、如果栈 stack 为空:此时 stack.pop() 操作会报错,因此,我们采用一个取巧方法,给 stack 赋初值为 ?,并在哈希表 dic 中建立 key,value 为 ?的对应关系予以配合。此时当 stack 为空且 c 为右括号时,可以正常提前返回 false
2、字符串 s 以左括号结尾:此情况下可以正常遍历完整个 s,但 stack 中遗留未出栈的左括号,因此,最后需返回 len(stack) = 1 ,以判断是否是有效的括号组合
代码实现:
1 |
|
时间复杂度和空间复杂度分析:
1、时间复杂度:O(n),正确的括号组合需要遍历 n 遍,n 为 s 的长度;
2、空间复杂度:O(n),哈希表和栈使用线性的空间大小。
三、总结
本道算法题难度为简单,我们使用了栈 + 哈希表的方法进行了快速求解
好了,本篇文章到这里就结束了,感谢你的阅读🤝