题目
给定一个字符串,只包含字符’(’, ‘)’, ‘{’, ‘}’, ‘[’ 和’]’,判断此字符串是否有效。
满足以下条件为有效:
- 左括号必须有同样类型的右括号相匹配
- 右括号匹配顺序必须和左括号相对应
注意:一个空字符串也是有效的。
Example 1:
Input: “()”
Output: true
Example 2:
Input: “()[]{}”
Output: true
Example 3:
Input: “(]”
Output: false
Example 4:
Input: “([)]”
Output: false
Example 5:
Input: “{[]}”
Output: true
思路
维护一个栈,每次遇到左括号便放进去,每次遇到右括号便pop一个左括号看是否与之对应。由于栈为后入先出,可以保证右括号的匹配顺序和左括号相对应。
如果遍历完字符串后,栈刚好变为空,则说明字符串是有效的。
python 实现
def isValid(s):
"""
:type s: str
:rtype: bool
"""
if not s:
return True
if len(s) % 2 == 1:
return False
left = {'(':')','{':'}','[':']'}
stack = []
for char in s:
if char in left:
stack.append(char)
elif not stack or left[stack.pop()] != char:
return False
return not stack
if '__main__' == __name__:
s = "([)]"
print(isValid(s))