20. 有效的括号
return True if not stack else False 这句话重点
class Solution:
def isValid(self, s: str) -> bool:
if len(s) % 2 != 0:
return False
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()
#如果s遍历完了,stack不为空,也要return False
return True if not stack else False
1047. 删除字符串中的所有相邻重复项
定义一个stack =[ ],比如说"abbaca"
stack 是空的,所以[a],下一个是b,[a,b],接下来是b,stack[-1]相同,所以pop
class Solution:
def removeDuplicates(self, s: str) -> str:
stack = []
for item in s:
if not stack or item != stack[-1]:
stack.append(item)
else:
stack.pop()
return ''.join(stack)
方法二:注意 if stack and item == stack[-1]
class Solution:
def removeDuplicates(self, s: str) -> str:
stack = []
for item in s:
if stack and item == stack[-1]:
stack.pop()
else:
stack.append(item)
return ''.join(stack)
150. 逆波兰表达式求值
二叉树,碰到运算符,取最顶上的两个出来运算,并返回栈,先取出来num2,再取出num1,运算的时候num1在前,num2在后运算,python可以import,但是python的除法和本题不一样,所以要"/": lambda x, y: int(x / y)
map()
list(map(square, [1,2,3,4,5])) # 使用 list() 转换为列表
[1, 4, 9, 16, 25]
from operator import add,sub,mul
class Solution:
op_map = {'+':add,'-':sub,'*':mul,'/':lambda x,y: int(x/y)}
def evalRPN(self, tokens: List[str]) -> int:
stack = []
for token in tokens:
if token not in {'+','-','*','/'}:
stack.append(int(token))
else:
num2 = stack.pop()
num1 = stack.pop()
stack.append(self.op_map[token](num1,num2))
return stack.pop()
- 自己看到题目的第一想法
有效的括号之前做过,但是又忘记了
- 看完代码随想录之后的想法
感觉越来越通透了
逆波兰表达式求值可以再回顾一下
- 自己实现过程中遇到哪些困难
- 今日收获,记录一下自己的学习时长