给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
链接:https://leetcode-cn.com/problems/valid-parentheses
想到用栈来解决,进去一个,若对应正确则弹出末尾,若最后栈非空,则不正确,若中途未对应正确则不正确。
class Solution:
def isValid(self, s: str) -> bool:
# 栈来解
if not s:
return True
stack_ = []
for i in s:
if i == '(' or i == '{' or i == '[':
stack_.append(i)
elif i == ')':
if not stack_ or stack_[-1] != '(':
return False
else:
del stack_[-1]
elif i == '}':
if not stack_ or stack_[-1] != '{':
return False
else:
del stack_[-1]
elif i == ']':
if not stack_ or stack_[-1] != '[':
return False
else:
del stack_[-1]
if stack_:
return False
return True
还有一个取巧写法,很好理解,从评论区大佬DaydayLeetcode处学来:
if len(s)%2 != 0:
return False
while '()' in s or '[]' in s or '{}' in s:
s = s.replace('[]','').replace('()','').replace('{}','')
return True if s == '' else False