Stack and Queue
Stack: FILO
Queue: FIFO
Q232 Stack realize Queue
[Link]
classMyQueue:
def__init__(self):
self.stack_in = [] # FILO
self.stack_out = [] # FILO
defpush(self, x: int) ->None:
self.stack_in.append(x)
defpop(self) ->int:
ifself.empty():
returnNone
ifself.stack_out:
returnself.stack_out.pop()
else:
foriinrange(len(self.stack_in)):
self.stack_out.append(self.stack_in.pop())
returnself.stack_out.pop()
defpeek(self) ->int:
ans = self.pop()
self.stack_out.append(ans)
returnans
defempty(self) ->bool:
returnnot (self.stack_inorself.stack_out)
Q225 Queue realize Stack
[Link]
fromcollectionsimportdeque
classMyStack:
def__init__(self):
self.queue_in = deque()
self.queue_out = deque()
defpush(self, x: int) ->None:
self.queue_in.append(x)
defpop(self) ->int:
'''
先把queue_in中的除了最后一个的所有元素依次出列放进queue_out;
交换in和out,此时out里只有一个元素;
out中的pop出来,即是原队列的最后一个
'''
ifself.empty():
returnNone
foriinrange(len(self.queue_in) -1):
self.queue_out.append(self.queue_in.popleft())
self.queue_in, self.queue_out = self.queue_out, self.queue_in
returnself.queue_out.popleft()
deftop(self) ->int:
ifself.empty():
returnNone
returnself.queue_in[-1]
defempty(self) ->bool:
returnlen(self.queue_in) == 0
Q20
[Link]
classSolution:
defisValid(self, s: str) ->bool:
stack = []
foritemins:
ifitem == '(':
stack.append(')')
elifitem == '[':
stack.append(']')
elifitem == '{':
stack.append('}')
elifnotstackorstack[-1] != item:
returnFalse
else:
stack.pop()
returnTrueifnotstackelseFalse
Q1047
[Link]
classSolution:
defremoveDuplicates(self, s: str) ->str:
result = list()
foritemins:
ifresultandresult[-1] == item:
result.pop()
else:
result.append(item)
return"".join(result)
Q150
[Link]
fromoperatorimportadd, sub, mul
classSolution:
defevalRPN(self, tokens: List[str]) ->int:
stack = []
map = {'+': add, '-': sub, '*': mul, '/': lambdax, y: int(x/y)}
fortokenintokens:
iftokennotin {'+', '-', '*', '/'}:
stack.append(int(token))
else:
second = stack.pop()
first = stack.pop()
stack.append(self.map[token](first, second)) #注意顺序!
returnstack.pop()
Reference from: https://programmercarl.com/