leetcode 第十天 2024.3.21

1. 用栈实现队列:
 题目链接: 232. 用栈实现队列 - 力扣(LeetCode)
应用条件:


难点:

要想到可以用两个栈,stackin用做push,stackout用做pop,每次push,stackin收纳元素,pop操作的时候,把stackin的所有元素一个一个pop出来再一个一个push进stackout中,然后popstackout就好了。这里有一点值得注意,就是我们需要判断stackout是否为空,在为空的情况下像刚才那么操作,在不为空的情况下,因为stackout中元素的顺序已经反过来了,所以在不为空的情况下直接stackout pop出来,就是我们要找的哪个元素。

个人错误:

对这种实现方法类的题目还是不熟练,有些陌生。

思路:

如下

class MyQueue:

    def __init__(self):
        self.stackin = []
        self.stackout = []


    def push(self, x: int) -> None:
        self.stackin.append(x)


    def pop(self) -> int:
        if self.empty():
            return None

        if self.stackout:
            return self.stackout.pop()
        else:
            for i in range(len(self.stackin)):
                self.stackout.append(self.stackin.pop())
            return self.stackout.pop()


    def peek(self) -> int:
        ans = self.pop()
        self.stackout.append(ans)
        return ans


    def empty(self) -> bool:
        return not (self.stackin or self.stackout)

 2. 用队列实现栈:
 题目链接: 225. 用队列实现栈 - 力扣(LeetCode)
应用条件:


难点:

直接用双端列表进行操作,偷懒了,创建一个双端列表:d = deque(),双端列表中的操作:从右侧(尾部)添加一个元素 d.append(), 从左侧(头部)添加一个元素 d.appendleft(),从右侧(尾部)删除一个元素 d.pop(),从左侧(头部)删除一个元素 d.popleft()

个人错误:

无。

思路:

如下

class MyStack:

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


    def push(self, x: int) -> None:
        self.que.appendleft(x)


    def pop(self) -> int:

        return self.que.popleft()


    def top(self) -> int:
        temp = self.que.popleft()
        self.que.appendleft(temp)
        return temp


    def empty(self) -> bool:
        return not self.que

3. 有效括号:
 题目链接: 20. 有效的括号 - 力扣(LeetCode)
应用条件:


难点:

主要是要想到两点,第一:我们遍历整个字符串,遇到左括号直接将其对应类型的右括号加入到栈中,遇到右括号,我们直接找栈的最顶端的元素,判断它与当前遇到的右括号是不是一样,如果不一样或者没有了就返回false,一样就继续匹配。最后如果栈是空的就返回true,如果还有就返回false.

个人错误:

想不到用栈来解决,想用dictionary,发现很难解决前后顺序问题。

思路:

如下

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值