代码随想录算法训练营第十天| 232.用栈实现队列 225. 用队列实现栈 20. 有效的括号 1047. 删除字符串中的所有相邻重复项

 232.用栈实现队列  

代码随想录题解

力扣232

ass MyQueue(object):

    def __init__(self):
        self.stack_in = []
        self.stack_out = []

    def push(self, x):
        self.stack_in.append(x)


    def pop(self):
        if self.empty():
            return None
        
        if self.stack_out:
            return self.stack_out.pop()
        else:
            for i in range(len(self.stack_in)):
                self.stack_out.append(self.stack_in.pop())
            return self.stack_out.pop()


    def peek(self):
        ans = self.pop()
        self.stack_out.append(ans)
        return ans


    def empty(self):
         return not (self.stack_in or self.stack_out)

用栈来模拟队列,需要两个栈,一个输入栈一个输出栈。

push的时候只需要把数据放入输入栈,pop的时候,如果输出栈为空就把进栈数据全部导入进来,再从输出栈弹出数据,如果输出栈不为空,则直接从出栈弹出数据。

如果进栈和出栈都为空的话,说明模拟的队列为空。

225. 用队列实现栈

力扣225

按照代码随想录的题解,可以通过两个队列实现栈,这种方法是为了加深印象,更好的理解栈和队列。但由于这几天太忙了,我来不及理解……就用一个队列简单实现了。

class MyStack:

    def __init__(self):
        self.que = deque()

    def push(self, x):
        self.que.append(x)

    def pop(self):
        if self.empty():
            return None
        for i in range(len(self.que)-1):
            self.que.append(self.que.popleft())
        return self.que.popleft()

    def top(self):
        if self.empty():
            return None
        return self.que[-1]

    def empty(self):
        return not self.que

20. 有效的括号

力扣20

这道题之前笔试做过,印象深刻……直接写了:

class Solution(object):
    def isValid(self, s):
        stack = []
        for i in s:
            if i == '(':
                stack.append(')')
            elif i == '[':
                stack.append(']')
            elif i == '{':
                stack.append('}')
            elif not stack or stack[-1] != i:
                return False
            else:
                stack.pop()
        return True if not stack else False

我参考了题解的写法,如果是左括号,就把对应的右括号压入栈。在遍历时,如果栈已经空了或者栈头括号不匹配,直接输出False,如果没有以上情况,把栈头的括号删了。如果遍历完了栈还是没空,也是输出False。

1047. 删除字符串中的所有相邻重复项 

这道题笔试考过,再写一遍:

力扣1047

class Solution(object):
    def removeDuplicates(self, s):
        stack = []
        for a in s:
            if stack and stack[-1] == a :
                stack.pop()
            else:
                stack.append(a)
        return ''.join(stack)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值