代码随想录算法训练营第十天

63 阅读1分钟

232.用栈实现队列

class MyQueue:

    def __init__(self):
        self.s1=[]
        self.s2=[]

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

    def pop(self) -> int:
        self.peek()
        return self.s2.pop()
    
    def peek(self) -> int:  #返回队头元素
        if not self.s2: #检查是否为空
            #把s1元素压入s2
            while self.s1:
                self.s2.append(self.s1.pop())
        return self.s2[-1]
    def empty(self) -> bool:
        return not self.s1 and not self.s2
 

225.用队列实现栈

class MyStack:

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

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

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


    def top(self) -> int:
        if self.empty():
            return None
        for i in range(len(self.queue)-1):
            self.queue.append(self.queue.popleft())
        temp = self.queue.popleft()
        self.queue.append(temp)
        return temp

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

20.有效的括号

本题最重要的就是分析出来错误的情况有哪几种:

  • 左括号多余了
  • 右括号多余了
  • 没有多余括号,但是括号不匹配

代码逻辑:
如果遇到左括号,就将对应的右括号压入栈中;
如果遇到右括号,就判断现在栈是否为空,如果为空就说明没有对应的左括号匹配了,返回False;或者看栈顶元素是否与item相同,如果不同,也返回False。
如果有对应的左括号,则将栈里的元素弹出
当栈为空时返回True,否则返回False.

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()
        return True if not stack else False

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

思路和上一题很类似!感觉栈的题有一通百通的

class Solution:
    def removeDuplicates(self, s: str) -> str:
        stack=[]
        for item in s:
            if not stack or item != stack[-1]:
                stack.append(item)
            elif stack[-1]==item:
                stack.pop()
            elif stack[-1]!=item:
                stack.append(item)
        return ''.join(stack)