代码随想录算法训练营第十一天|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()
相关推荐
ChoSeitaku几秒前
链表循环及差集相关算法题|判断循环双链表是否对称|两循环单链表合并成循环链表|使双向循环链表有序|单循环链表改双向循环链表|两链表的差集(C)
c语言·算法·链表
娅娅梨3 分钟前
C++ 错题本--not found for architecture x86_64 问题
开发语言·c++
汤米粥8 分钟前
小皮PHP连接数据库提示could not find driver
开发语言·php
Fuxiao___10 分钟前
不使用递归的决策树生成算法
算法
冰淇淋烤布蕾11 分钟前
EasyExcel使用
java·开发语言·excel
我爱工作&工作love我15 分钟前
1435:【例题3】曲线 一本通 代替三分
c++·算法
拾荒的小海螺18 分钟前
JAVA:探索 EasyExcel 的技术指南
java·开发语言
秀儿还能再秀32 分钟前
机器学习——简单线性回归、逻辑回归
笔记·python·学习·机器学习
马剑威(威哥爱编程)42 分钟前
哇喔!20种单例模式的实现与变异总结
java·开发语言·单例模式
白-胖-子1 小时前
【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-统计数字
开发语言·c++·算法·蓝桥杯·等考·13级