题目:有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
1. 左括号必须用相同类型的右括号闭合。
2. 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
def isValid(s): # 这个方法没有判断优先级 """ :type s: str :rtype: bool """ dic={'(':')','[':']','{':'}'} stack=[] # 使用栈这种数据结构 for current in s: if current in dic.keys(): # 如果是左括号,那么就加入到列表中 stack.append(current) elif current in dic.values(): if len(stack)==0 or dic.get(stack[-1])!=current:# 如果第一个是反括号,或者不是成对的括号,那么就返回False return False else: stack.pop() # 如果能找到,就把对应的左括号删除 if len(stack)==0: return True else: return False print("{[]()}()[(())]",isValid("{[]()}()[(())]")) print("()[]{}",isValid("()[]{}")) print("(]",isValid("(]")) print("([)]",isValid("([)]")) print("{[]}",isValid("{[]}"))
def func(s): # 这个方法是判断了优先级的,小括号里面不能有大括号和中括号,中括号里面不能有大括号 s_d = [] s_z = [] s_x = [] for i in range(len(s)): if s[i] == "{" or s[i] == "}": s_d.append(i) elif s[i] == "[" or s[i] == ']': s_z.append(i) else: s_x.append(i) if len(s_d) % 2 != 0 and len(s_z) % 2 != 0 and len(s_x) % 2 != 0: return False else: if s_x and (len(s_x) // 2 + sum(s_x)) % 2 != 0: return False if s_z and (len(s_z) // 2 + sum(s_z)) % 2 != 0: return False if s_d and (len(s_d) // 2 + sum(s_d)) % 2 != 0: return False else: if s_x: list1 = [] list2 = [] for i in s_x: if s[i] == "(": list1.append(i) else: list2.append(i) for i in list1[::-1]: for j in list2: if i < j and ((i + j) + 1) % 2 == 0: if "{" in s[i:j] or "}" in s[i:j] or "[" in s[i:j] or "]" in s[i:j]: return False else: break if s_z: list3 = [] list4 = [] for i in s_x: if s[i] == "[": list3.append(i) else: list4.append(i) for i in list3[::-1]: for j in list4: if i < j and ((i + j) + 1) % 2 == 0: if "{" in s[i:j] or "}" in s[i:j]: return False else: break return True print(func("{[]}")) print(func("([)]")) print(func("()[]{}")) print(func("{[]()}()[(())]"))