给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()" 输出:true
示例 2:
输入:s = "()[]{}" 输出:true
示例 3:
输入:s = "(]" 输出:false
提示:
1 <= s.length <= 104
s
仅由括号'()[]{}'
组成
实现:
可以使用栈来解决这个问题。遇到左括号就入栈,遇到右括号就判断栈顶是否匹配,如果匹配则出栈,否则返回False。如果最后栈为空,则说明所有括号都匹配成功,返回True。
以下是Python的实现代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Solution: def isValid( self , s: str ) - > bool : stack = [] for c in s: if c in ( '(' , '[' , '{' ): stack.append(c) else : if not stack: return False top = stack.pop() if (top = = '(' and c ! = ')' ) or \ (top = = '[' and c ! = ']' ) or \ (top = = '{' and c ! = '}' ): return False return not stack |
时间复杂度为O(n),其中n为字符串s的长度,空间复杂度也为O(n),即栈的最大长度。
知识点:
栈是一种数据结构,它遵循“后进先出”(LIFO)的原则。也就是说,最后压入栈中的元素最先弹出,而最先压入栈中的元素最后弹出。
栈有两个基本操作:压入(push)和弹出(pop)。当一个元素被压入栈中,它就成为了栈的顶部元素(top)。当需要弹出一个元素时,栈会弹出栈顶元素,并把它从栈中删除。
栈的另外一个重要的操作是查看栈顶元素(top),这个操作并不会删除栈顶元素。
栈的应用十分广泛,例如程序中函数的调用栈就是一个典型的栈结构。当一个函数被调用时,它会被压入栈中,当函数执行完毕时,它会被弹出栈。栈还可以用来实现括号匹配、浏览器的后退功能等。
标签:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧