题目描述
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
解题思路
本题的技巧:栈
原理:不管括号顺序多复杂,最里面的括号肯定是配对的,从内往外拆解即可
伪代码:
建空栈
建字典(字典{key:value,key:value})
遍历s的字符:
如果栈不为空且该字符是有括号:
检查栈顶元素是否和该字符配对(即值与该字符对应的value相等)
相等则两个弹出栈
不等则压入栈
栈为空则压入栈(处理第一个字符及后续的部分字符)
遍历结束若栈为空则全部配对成功
若栈不为空则有未配对字符在栈中(即该字符串括号逻辑有误)
代码
class Solution:
def isValid(self, s):
stack = []
dic = {')':'(',']':'[','}':'{'}
for i in s:
if stack and i in dic:
if stack[-1]==dic[i]:stack.pop()
else: stack.append(i)
else: stack.append(i)
return not stack