题目描述:
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号
输入输出实例:
思路:这道题目我们可以使用栈来解决,建立一个空列表stack,这个栈我们用来存放左括号。遍历字符串s,如果当前符号是左括号我们就放到栈里面。如果当前是右括号,(栈不空的情况下)我们取出最后一个存放到栈中的左括号看是否与当前右括号对应——因此我们可以建立一个字典用来存储括号的对应关系,如果对应我们就接着往下遍历;如果当前栈为空或者取出来的左括号不与当前右括号对应我们就返回False。最后return的时候我们还要看栈是否为空,如果为空我们返回True,如果不为空说明左右括号数量并不匹配我们返回False。根据上述思路有以下代码:
class Solution:
def isValid(self, s: str) -> bool:
#使用栈
stack = []
#建立括号对应关系
fx_map = {')':'(','}':'{',']':'['}
for char in s:
#将左括号存进去
if char in fx_map.values():
stack.append(char)
#碰到右括号
elif char in fx_map.keys():
#如果栈为空或者是上一个左括号与当前右括号不匹配
if not stack or stack.pop()!=fx_map[char]:
return False
#最后栈是空的才行
return True if len(stack)==0 else False