代码随想录算法训练营第十一天|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()
相关推荐
嫩萝卜头儿3 小时前
2 - 复杂度收尾 + 链表经典OJ
数据结构·算法·链表·复杂度
c++之路3 小时前
C++20概述
java·开发语言·c++20
星马梦缘3 小时前
算法设计与分析 作业二 答案与解析
算法·图论·dfs·bfs·floyd-warshall·bellman_ford·多源最短路
玛丽莲茼蒿3 小时前
Leetcode hot100 每日温度【中等】
算法·leetcode·职场和发展
cjp5603 小时前
009.UG二次开发,任务环境草图优化3(高级功能生成直线)
算法
芝士就是力量啊 ೄ೨3 小时前
Python如何编写一个简单的类
开发语言·python
样例过了就是过了4 小时前
LeetCode热题100 分割等和子集
数据结构·c++·算法·leetcode·动态规划
胖虎喜欢静香4 小时前
从零到一快速实现 Mini DeepResearch
人工智能·python·开源
逻辑驱动的ken4 小时前
Java高频面试考点18
java·开发语言·数据库·算法·面试·职场和发展·哈希算法
MoonBit月兔4 小时前
「Why MoonBit 」第一期——Singularity Note AI 学习助手
开发语言·人工智能·moonbit