题目描述:
Given a string containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
An input string is valid if:
Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.
例子:
Example 1:
Input: "()"
Output: true
Example 2:
Input: "()[]{}"
Output: true
Example 3:
Input: "(]"
Output: false
思路:
这道题条件比较苛刻,不过用stack配合dictionary可以轻松解决。左括号分别存到stack中,右括号分别作为对比。最后检查stack是否有剩余。之所以用stack是因为stack可以完美的检测出左右括号的匹配位置情况。
代码:
class Solution:
def isValid(self, s: str) -> bool:
d = {"(":")","[":"]","{":"}"}
stack = []
for i in s:
if i in d:
stack.append(i)
elif len(stack) == 0 or d[stack.pop()] != i:
return False
return len(stack) == 0
注解:
- elif len(stack) == 0是为了排除单右括号的情况。
- or d[stack.pop()] != i 是为了右括号匹配左括号。
- return len(stack) == 0是为了检测栈是否为空