【算法题】20. 有效的括号-力扣(LeetCode)
1.题目
下方是力扣官方题目的地址
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
**输入:**s = “()”
**输出:**true
示例 2:
**输入:**s = “()[]{}”
**输出:**true
示例 3:
**输入:**s = “(]”
**输出:**false
示例 4:
**输入:**s = “([])”
**输出:**true
提示:
1 <= s.length <= 104
s
仅由括号'()[]{}'
组成
2.题解
思路
本题可以使用栈这一数据结构来解决
左括号与右括号需要对应,也就是说,如果左边有n个左括号,那么右边必然也会有n个右括号与之对应。
利用这个关系,我们可以建立一个哈希表:
di={')':'(',']':'[','}':'{'}
将三种括号都对应起来
如何我们建立一个栈
我们遍历字符串s
,如果栈为空或者栈顶的括号与遍历到的括号相对应,那么就出栈;反之则入栈。
到了遍历完之后如果栈为空,那么就是符合要求的,反之则不是
Python代码
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
at=[]
di={')':'(',']':'[','}':'{'}
for i in s:
if not at or at[-1] !=di.get(i):
at.append(i)
else:at.pop()
return False if at else True
3.结语
本人资历尚浅,发博客主要是记录与学习,欢迎大佬们批评指教!大家也可以在评论区多多交流,相互学习,共同成长。
标签:20,示例,di,力扣,括号,true,LeetCode From: https://blog.csdn.net/Janium/article/details/142470542