今日任务
1)20有效的括号
2)1047删除字符串中的所有相邻重复项
3)150逆波兰表达式求值
20有效的括号
文章讲解:代码随想录 (programmercarl.com)
视频讲解:栈的拿手好戏!| LeetCode:20. 有效的括号哔哩哔哩bilibili
class Solution:
def isValid(self, s: str) -> bool:
l = list()
for i in s:
if i in ['(','{','[']:
l.append(i)
if i in [')','}',']']:
if not l: # l为空直接退出
return False
if l.pop()+i not in ['()','{}','[]']:
return False
return not l
1047. 删除字符串中的所有相邻重复项
题目链接:1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode)
文章讲解:代码随想录 (programmercarl.com)
视频讲解:栈的好戏还要继续!| LeetCode:1047. 删除字符串中的所有相邻重复项哔哩哔哩bilibili
class Solution:
def removeDuplicates(self, s: str) -> str:
stack = []
for i in range(len(s)):
if stack and stack[-1] == s[i]:
stack.pop()
else:
stack.append(s[i])
return ''.join(stack)
150. 逆波兰表达式求值
题目链接:150. 逆波兰表达式求值 - 力扣(LeetCode)
文章讲解:代码随想录 (programmercarl.com)
视频讲解:栈的最后表演! | LeetCode:150. 逆波兰表达式求值哔哩哔哩bilibili
class Solution:
def evalRPN(self, tokens: list[str]) -> int:
# todo 定义一个符号的map
op_map = {'+': lambda a, b: a + b, '-': lambda a, b: a - b, '*': lambda a, b: a * b, '/': lambda a, b: int(a / b)}
# op_map = {'+': add, '-': sub, '*': mul, '/': lambda x, y: int(x / y)} # 需要导包 from operator import *
# 入栈
stack = []
for i in tokens:
if i in op_map:
op2 = stack.pop()
op1 = stack.pop()
stack.append(op_map[i](op1,op2))
else:
stack.append(int(i))
return stack.pop()
感想:
今天题比较简单,基本看了题目就能有思路,也没有看题解和视频,发现最后都是一样,后面二刷可是想想其他解法