LeetCode20有效的括号

未经博主同意,禁止瞎JB转载。

LeetCode20有效的括号

https://leetcode-cn.com/problems/valid-parentheses/description/

我的解法:

示例如下:

利用了栈的思想,使用两个列表实现配对,与官方提供的解答是一样的,但是写的就比较麻烦。

 1 class Solution(object):
 2     def isValid(self, s):
 3         """
 4         :type s: str
 5         :rtype: bool
 6         """
 7         # "(([]){})"
 8         s = list(s)
 9         n = len(s)
10         if n == 0:
11             return True
12         if n % 2 == 1:
13             return False
14         ret = []
15         i = 0
16         while len(s):
17             if s[0] == '(' or s[0] == '[' or s[0] == '{':
18                 ret.append(s.pop(0))
19                 if len(ret)>len(s):
20                     return False
21             else:
22                 if len(ret) == 0:
23                     return False
24                 while len(ret):
25                     if ret[-1] == '(' and s[0] == ')' or ret[-1] == '[' and s[0] == ']' or ret[-1] == '{' and s[0] == '}':
26                         ret.pop()
27                         s.pop(0)
28                     elif s[0] == '(' or s[0] == '[' or s[0] == '{':
29                         break
30                     else:
31                         return False
32         if len(ret):
33             return False
34         return True

 官方的解答:

https://leetcode-cn.com/problems/valid-parentheses/solution/

 1 class Solution(object):
 2     def isValid(self, s):
 3         """
 4         :type s: str
 5         :rtype: bool
 6         """
 7 
 8         # The stack to keep track of opening brackets.
 9         stack = []
10 
11         # Hash map for keeping track of mappings. This keeps the code very clean.
12         # Also makes adding more types of parenthesis easier
13         mapping = {")": "(", "}": "{", "]": "["}
14 
15         # For every bracket in the expression.
16         for char in s:
17 
18             # If the character is an closing bracket
19             if char in mapping:
20 
21                 # Pop the topmost element from the stack, if it is non empty
22                 # Otherwise assign a dummy value of '#' to the top_element variable
23                 top_element = stack.pop() if stack else '#'
24 
25                 # The mapping for the opening bracket in our hash and the top
26                 # element of the stack don't match, return False
27                 if mapping[char] != top_element:
28                     return False
29             else:
30                 # We have an opening bracket, simply push it onto the stack.
31                 stack.append(char)
32 
33         # In the end, if the stack is empty, then we have a valid expression.
34         # The stack won't be empty for cases like ((()
35         return not stack

 

posted @ 2018-10-09 10:52  嬴政有条北冥的鱼  阅读(110)  评论(0编辑  收藏  举报