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

59 阅读1分钟

Leetcode 20 Valid Parentheses

1. 第一想法

知道是用栈的,如果要自己试出来要花很多时间,觉得好麻烦。

2. 看完后想法

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

3. 总结

先分析不匹配的情况。

Leetcode 1047 Remove All Adjacent Duplicates In String

1. 第一想法

感觉会不停循环下去...

2. 看完后想法

class Solution:
    def removeDuplicates(self, s: str) -> str:
        res = list()
        for item in s:
            if res and res[-1] == item:
                res.pop()
            else:
                res.append(item)
        return "".join(res)

3. 总结

常看常新。

Leetcode 150 Evaluate Reverse Polish Notation

1. 第一想法

没什么想法。

2. 看完后想法

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. 总结

常看常新。