✨博文作者 wangzirui32
💖 喜欢的可以 点赞 收藏 关注哦~~
👉本文首发于优快云,未经许可禁止转载
1. 题目描述
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-parentheses/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题思路
我们需要栈去实现,以([)]
为例,先模拟一个空栈,规定遍历到左括号入栈,遍历到右括号尝试出栈,然后开始遍历字符串,第一个字符为(
,将其入栈:
项 | 0 |
---|---|
值 | "(" |
第二个字符为[
,属于左括号,入栈:
项 | 0 | 1 |
---|---|---|
值 | "(" | "[" |
第三个字符为)
,属于右括号,尝试出栈:
项 | 0 | 1 |
---|---|---|
值 | "(" | "[" |
最后一个加入的元素为[
,无法与)
对应,匹配失败,返回False
再来以()[]
为例,如下:
第一个字符为(
,入栈:
项 | 0 |
---|---|
值 | "(" |
第二个字符为)
,与最后一个括号相对应,出栈成功:
项 | - |
---|---|
值 | - |
第三个字符为[
,入栈:
项 | 0 |
---|---|
值 | "[" |
第四个字符为]
,与最后一个括号相对应,出栈成功:
项 | - |
---|---|
值 | - |
最后,所有出栈均成功,最后栈为空,返回True。
3. 代码实现
Code:
class Solution:
def __init__(self) -> None:
# 括号表
self.brackets = {
")": "(",
"]": "[",
"}": "{",
}
# 左括号
self.left = self.brackets.values()
# 右括号
self.right = self.brackets.keys()
def isValid(self, s: str) -> bool:
stack_brackets = [] # 使用列表模拟栈
if len(s) < 2: return False # 如果长度小于2 一定无效
for i in s: # 遍历字符
if i in self.left: # 存在左括号
stack_brackets.append(i) # 入栈
continue
if i in self.right: # 存在右括号
try: last_bracket = stack_brackets[-1] # 尝试取出左括号
except: return False # 出错(元素不存在)返回False
# 如果相对应 出栈 否则返回False
if self.brackets[i] == last_bracket:
del stack_brackets[-1]
else:
return False
return stack_brackets == [] # 如果栈为空 返回True 反之False
4. 最终结果
🎉🎉🎉 好了,今天的课程就到这里,我是wangzirui32,喜欢的可以点个收藏和关注,我们下次再见!