有效的括号 - LeetCode
有效的括号 - LeetCode
问题描述
-
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
-
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
问题分析
按顺序读取字符,如果是左括号就直接压入,如果是右括号就进行匹配。若栈中无元素就直接返回法false,有元素则进行比对,不一致返回false。比较结束后站内剩余左括号返回false,栈内无元素则返回true。
代码
def isValid(s):
"""
:type s: str
:rtype: bool
"""
if not s: #判断字符串是否为空
return True
temp_str = "" #存放临时开括号
for cha in s:
if cha == "(" or cha == "[" or cha == "{": #如果是开括号就放入temp_str字符串中
temp_str = temp_str + cha
else:
if not temp_str: #如果temp_str为空,返回False
return False
else:
temp_cha = temp_str[-1] #取出最新压入的开括号
temp_str = temp_str[0:-1] #开括号字符串减一
if temp_cha == "(" and cha == ")": #判断开括号和闭括号是否满足要求
pass
elif temp_cha == "[" and cha == "]":
pass
elif temp_cha == "{" and cha == "}":
pass
else:
return False
if not temp_str: #判断是否存在多余开括号
return True
else:
return False