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