欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > LeetCode:有效的括号

LeetCode:有效的括号

2025/4/19 3:49:06 来源:https://blog.csdn.net/2302_80457734/article/details/147075973  浏览:    关键词:LeetCode:有效的括号

基本思路为:利用栈和映射字典,遇到左括号入栈,遇到右括号时检查栈顶元素是否匹配,若不匹配则返回 False,最后检查栈是否为空来确定字符串是否有效。

首先,创建一个空栈存储左括号;

创建一个映射字典,键为左括号,值为对应的右括号;

遍历字符,如果当前字符是左括号就压入栈中;如果是右括号,如果栈是空的则返回False;弹出栈顶元素,如果此元素对应的和char不一样,返回False;

遍历结束后若栈为空,说明所有的左括号都匹配右括号,返回True。

此代码运行效率中等,在LeetCode中属于中等水平:

class Solution(object):def isValid(self, s):""":type s: str:rtype: bool"""# 初始化一个空栈,用于存储左括号stack = []# 创建一个映射字典,键为左括号,值为对应的右括号mapping = {"(": ")", "[": "]", "{": "}"}# 遍历输入字符串中的每个字符for char in s:# 如果当前字符是左括号if char in mapping:# 直接将左括号压入栈中stack.append(char)else:# 如果当前字符是右括号if not stack:# 若栈为空,说明没有对应的左括号,返回 Falsereturn False# 弹出栈顶元素top_element = stack.pop()# 检查栈顶元素对应的右括号是否和当前字符相等if mapping[top_element] != char:return False# 遍历结束后,若栈为空,说明所有左括号都有匹配的右括号,返回 True;否则返回 Falsereturn len(stack) == 0

大佬做法:

class Solution:def isValid(self, s: str) -> bool:# 如果字符串长度为奇数,那么必然存在一个括号无法匹配,直接返回 Falseif len(s) % 2 == 1:return False# 定义一个字典,键为右括号,值为对应的左括号,用于后续匹配检查pairs = {")": "(","]": "[","}": "{",}# 初始化一个空列表作为栈,用于存储遍历过程中遇到的左括号stack = list()# 遍历输入字符串中的每个字符for ch in s:# 如果当前字符是右括号if ch in pairs:# 如果栈为空,说明没有对应的左括号;或者栈顶元素与当前右括号对应的左括号不匹配# 则说明括号序列无效,返回 Falseif not stack or stack[-1] != pairs[ch]:return False# 若匹配成功,弹出栈顶元素stack.pop()else:# 如果当前字符是左括号,将其压入栈中stack.append(ch)# 遍历结束后,如果栈为空,说明所有左括号都找到了对应的右括号,返回 True# 否则返回 Falsereturn not stack

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com