20.有效的括号
括号有效性也是非常常见的题目了,在c++里面基本会用到stack来解决这个问题.在python里面也是类似的思路.
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
示例 4:
输入:s = “([])”
输出:true
示例 5:
输入:s = “([)]”
输出:false
class Solution:
def isValid(self, s: str) -> bool:
q = deque() # 当然,栈也可以直接通过list,因为append和pop就够了
for char in s:
if char=='(' or char=='[' or char=='{':
# 左括号入栈
q.append(char)
else:
# 检查栈是否为空和none
if not q:
return False
# 右括号判断
chr = q.pop()
if char==')' and chr!='(' or \
char==']' and chr!='[' or \
char=='}' and chr!='{':
return False # 注意,这里只能判断false
return not q # 如果栈为空,说明都匹配完毕了
易错点很多,比如判断的时候判断的都是false的情况,只有匹配完毕并且栈空了之后才能说都匹配,匹配的条件也需要注意不要写错了.
所以还有更加方便的方式,通过哈希表来写对应的匹配,此时需要右括号作为key,左括号作为value
class Solution:
def isValid(self, s: str) -> bool:
stack = []
maping = {'}':'{', ')':'(', ']':'['}
for char in s:
if char in maping:# 找的是key键,如果右括号
if stack: # 如果栈空,说明一来就是右括号的情况,不可能匹配
top = stack.pop()
if maping[char] != top:
return False
else:
return False
else:
stack.append(char)
return not stack
也是要注意一下哈希集合是怎么进行in的,如果找到了右括号后也是一样要弹出左括号的,然后看能否匹配,判断的条件必须是不能匹配,也就是maping[char]!=top后return False的情况
1479

被折叠的 条评论
为什么被折叠?



