Python3解决括号匹配问题,使用栈

括号匹配,自己的代码,使用的栈(先进后出)解决,为了思路清晰,给各位用长代码先展示出来,后面有短代码,性能没变:

class Solution:
    class Stack:

        def __init__(self):
            self.__stack_list = []

        # push()方法,用来将数据推入栈中
        def push(self, data):
            self.__stack_list.append(data)

        # pop()方法,用来将栈顶的元素推出
        def pop(self):
            if self.isEmpty() != True:
                self.__stack_list.pop()

        # peek()方法,用来查看栈顶元素是什么
        def peek(self):
            if self.isEmpty() != True:
                return self.__stack_list[-1]

        # getSize()方法,用来获取栈的长度
        def getSize(self):
            return self.__stack_list.__len__()

        # isEmpty()方法,用来判断栈是否为空
        def isEmpty(self):
            return self.getSize() == 0

        def __str__(self):
            return self.__stack_list.__str__()

    def isValid(self, s: str) -> bool:
        stack = self.Stack()
        for i in s:
            if i == '(' or i == '[' or i == '{':
                stack.push(i)
            elif i == ')' and stack.peek() == '(' :
                stack.pop()
            elif i == ']' and stack.peek() == '[' :
                stack.pop()
            elif i == '}' and stack.peek() == '{' :
                stack.pop()
            else:
                return False

        return stack.isEmpty()

Leetcode上测试:

Leetcode
**自我反思:
经过前面几次失败,发现自己在对栈的构建上没有思考全面,如果当栈为空时进行peek,pop会出错,应该在这两个方法里面进行判断是否为空

缩短代码后,思路一样,性能没变:**

class Solution:
   
    def isValid(self, s: str) -> bool:
        stack = []
        for i in s:
            if i == '(' or i == '[' or i == '{':
                stack.append(i)
            elif len(stack) == 0:
                return False
            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 len(stack) == 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值