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

发布时间 2023-10-22 21:18:33作者: 忆象峰飞

20. 有效的括号
思路:分析出三种情况,画图模拟。写代码容易写错。

class Solution:
    def isValid(self, s: str) -> bool:
        a_stack = list()
        for i in s:
            if i == '(':
                a_stack.append(')')
            elif i == '{':
                a_stack.append('}')
            elif i == '[':
                a_stack.append(']')
            elif not a_stack or a_stack.pop() != i:
                return False
        return len(a_stack) == 0

1047. 删除字符串中的所有相邻重复项

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

150. 逆波兰表达式求值
逆波兰表达式就是二叉树的后续遍历

class Solution:
    def evalRPN(self, tokens: List[str]) -> int:
        a_stack = list()
        for i in tokens:
            if i == "+" or i == "-" or i == "*" or i == "/":
                nums1 = int(a_stack.pop())
                nums2 = int(a_stack.pop())
                if i == "+":
                    res = nums2 + nums1
                elif i == "-":
                    res = nums2 - nums1
                elif i == "*":
                    res = nums2 * nums1
                else:
                    res = int(nums2 / nums1)
                a_stack.append(res)
            else:
                a_stack.append(i)
        return int(a_stack.pop())