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
Example 4: Input: "([)]" Output: false
Example 5: Input: "{[]}" Output: true
思路
我们可以设置一个辅助空间栈来保存括弧的左半边,然后进行遍历。当遍历到不是右半边括弧时,我们就弹出最上面的括弧来和当前括弧进行对比,查看是否是有效括弧。 时间复杂度为O(n)(n为字符串的长度), 空间复杂度为O(n)。
图示思路
一直到遍历完毕
代码
1 class Solution(object):
2 def isValid(self, s):
3 """
4 :type s: str
5 :rtype: bool
6 """
7 if len(s) < 1: # 空字符串直接返回
8 return True
9 tem_dict = {')':'(', '}':'{', ']':'['} # 设置辅助字典
10 stack = [] # 设置辅助栈
11 for i in s: # 进行遍历
12 if i not in tem_dict:
13 stack.append(i)
14 else:
15 if stack: # 右括弧进行选择
16 t = stack.pop()
17 if t != tem_dict[i]:
18 return False
19 else:
20 return False
21 if stack: # 栈不为空的话返回False
22 return False
23 return True
24