代码随想录算法训练营第十一天|20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

今天是代码随想录算法训练营第十一天;

写了3道力扣:20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

  1. 有效的括号:
python 复制代码
# 方法一,仅使用栈,更省空间
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
  1. 删除字符串中的所有相邻重复项
python 复制代码
# # 方法一,使用栈
# class Solution:
#     def removeDuplicates(self, s: str) -> str:
#         res = list()
#         for item in s:
#             if res and res[-1] == item: # 如果栈非空 且 栈顶元素等于传入进来的item
#                 res.pop() # 那么就进行消除操作
#             else:
#                 res.append(item)
#         return "".join(res)  # 字符串拼接


# 此题还可以用双指针的方法
# 方法二,使用双指针模拟栈,如果不让用栈可以作为备选方法。
class Solution:
    def removeDuplicates(self, s: str) -> str:
        res = list(s)
        slow = fast = 0
        length = len(res)

        while fast < length:
            # 如果一样直接换,不一样会把后面的填在slow的位置
            res[slow] = res[fast]
            
            # 如果发现和前一个一样,就退一格指针
            if slow > 0 and res[slow] == res[slow - 1]:
                slow -= 1
            else:
                slow += 1
            fast += 1
            
        return ''.join(res[0: slow])
  1. 逆波兰表达式求值
python 复制代码
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:
                op2 = stack.pop()
                op1 = stack.pop()
                stack.append(self.op_map[token](op1, op2))  # 第一个出来的在运算符后面
        return stack.pop()
相关推荐
HMBBLOVEPDX16 分钟前
C++(静态函数)
开发语言·c++
hn小菜鸡17 分钟前
LeetCode 3643.垂直翻转子矩阵
算法·leetcode·矩阵
程序猿 小项目大搞头40 分钟前
即梦批量生成图片软件使用运营大管家-即梦图片批量生成器
python
dpxiaolong1 小时前
RK3588 Android12默认移除导航栏
开发语言·python
ゞ 正在缓冲99%…1 小时前
leetcode101.对称二叉树
算法
max5006001 小时前
基于多元线性回归、随机森林与神经网络的农作物元素含量预测及SHAP贡献量分析
人工智能·python·深度学习·神经网络·随机森林·线性回归·transformer
Pocker_Spades_A1 小时前
Python快速入门专业版(二十九):函数返回值:多返回值、None与函数嵌套调用
服务器·开发语言·python
良木林1 小时前
浅谈原型。
开发语言·javascript·原型模式
yunpeng.zhou1 小时前
logging 模块升级版 loguru
python
烈风2 小时前
004 Rust控制台打印输出
开发语言·后端·rust