- 有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
通过次数349,284提交次数829,458
class Solution:
def isValid(self, s):
#利用字典保存括号的映射值,方便后续对比
vec = {"(":1, ")":-1, "[":2, "]":-2, "{":3, "}":-3, "":0}
#用列表模拟栈,栈底元素为"",以便遍历第一个字符串时方便对比
temp_stack = [""]
#栈顶指针
top = 0
#遍历括号串
for i in s:
#如果当前括号和栈顶括号匹配,则将栈顶元素删除,栈顶指针-1
if vec[i]+vec[temp_stack[top]] == 0:
del temp_stack[top]
top -=1
#如果当前括号为右括号且与栈顶括号不匹配,说明此串定不合理,返回假
elif vec[i] < 0 and vec[i]+vec[temp_stack[top]] != 0:
return False
#如果当前括号为左括号,则将其入栈,栈顶指针+1
elif vec[i] > 0:
temp_stack.append(i)
top += 1
#若栈中括号没有全部相互消除,则串不合理,返回假
if top > 0:
return False
else:
return True
sl = Solution()
r = sl.isValid("()")
print(r)