题目要求:
判断一个括号组成的字符串是否有效
有效原则:每个括号都能找到使其闭合的另一半括号
eg:
{([]())} 有效
(])无效
思路:
对于连续的左括号 先对其进行保存
然后每输入一个右括号 去比对保存的最后一个左括号是否和它是一对的 如果是 继续读取输入如果不是 则判断该括号无效
实现:
用栈先进后出的原理能很好的实现上述思路
将连续左括号压入栈中 出现右括号 则对比最后压入的左括号
如果符合 则将最后一个左括号pop掉 继续读取 最后栈的长度应为初始长度
(这里给栈放入一个初始元素’?'以防止栈为空时辉出现的一系列问题)
如果不符合 则判断无效
python语法中没有栈的概念 可以用列表模拟栈
class Solution:
def isValid(self, s: str) -> bool:
stack = ['?']
dic ={'(':')','{':'}','[':']','?':'?'}
for i in range(len(s)):
if s[i] in dic :
stack.append(s[i])
else :
if dic[stack.pop()] != s[i]:
return False
return len(stack)==1