牛客题霸 NC52 python版答案

括号序列

https://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2

这一题的思路就是创建一个栈用来存储括号,具体思路如下:
1.如果栈为空则直接入栈,遍历下一个括号
2.若不为空且为(、[、{ 中一种则入栈
3.接下来依次比对括号是否为)、}、]中的一种,并与栈顶元素匹配,匹配则出栈,不匹配直接返回False
4.最后判断栈是否为空,为空则输出true,否则输出false

class Solution:
    def isValid(self , s ):
        # write code here
        stack = []
        for i in s:
            if not stack:
                stack.append(i)
                continue
            if i in ['(','{','[']:
                stack.append(i)
            elif i == '}' and stack[-1]== '{':
                stack.pop()
            elif i == ']' and stack[-1]== '[':
                stack.pop()
            elif i == ')' and stack[-1]== '(':
                stack.pop()
            else:
                return False
        return True if not stack else False
全部评论
栈空入栈有点问题,例如:输入")"这种字符串,无法在第一个字符的时候判断它是错误的。 再者,如果输入")))))))"会一直不停入栈,直至尾部。占用多余空间 提出问题:无法在第一时间发现输入字符串有问题,怎么改进代码解决? 解决方法: 遇到【左括号】:无条件入栈。 遇到【右括号】: 若与top不相容则 整个字符串有问题,返回false(例:"([)]") 相容则出栈遍历 字符串下一个字符 注:如果栈本身为空,当前遍历字符是【右括号】也判断为不相容。
1 回复 分享
发布于 2020-11-16 23:59

相关推荐

点赞 评论 收藏
分享
球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
2 2 评论
分享
牛客网
牛客企业服务