Leetcode DAY11:有效的括号 and 删除字符串中的所有相邻重复项 and 逆波兰表达式求值

20. 有效的括号

class Solution:
    def isValid(self, s: str) -> bool:
        stack = []
        for i in s:
            if i == '(':
                stack.append(')')
            elif i == '[':
                stack.append(']')
            elif i == '{':
                stack.append('}')
            # False的几种情况
            # 1)还未匹配完 但栈空了
            # 2)栈顶元素和i不相等
            elif not stack or stack[-1] != i:
                return False
            else:
                stack.pop ()
        # 3)匹配结束了 但栈内还有元素
        if not stack:
            return True
        else:
            return False
主要是利用栈判断,遍历s,如果遇到左半边符号,就把相应的右半边符号加入栈中,重点是考虑清楚以下几种情况,是返回F的:
1)还没有遍历完s的全部元素 栈已经空了
2)遍历到的元素和栈顶元素不匹配
3)最后遍历结束后 如果栈内还有元素

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

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

利用栈的性质解决很方便  要注意 要判断栈不为空 且 i 等于栈顶元素

150. 逆波兰表达式求值

(1)自己AC

class Solution:
    def evalRPN(self, tokens: List[str]) -> int:
        stack = []
        for t in tokens:
            if t == "+" or t == "-" or t == "*" or t == "/":
                num2 = stack.pop()
                num1 = stack.pop()
                if t == "+" :
                    stack.append(int(num1) + int(num2))
                if t == "-":
                    stack.append(int(num1) - int(num2))
                if t == "*" :
                    stack.append(int(num1) * int(num2))
                if t == "/":
                    stack.append(int(num1) / int(num2))
            else:
                stack.append(t)
        return int(stack.pop())

用到栈进行运算,遇到运算符 就把栈顶的两个元素弹出来 进行加减乘除计算后 放入栈中  如果遇到数字 直接放入栈中

(2)用到eval函数

class Solution:
    def evalRPN(self, tokens: List[str]) -> int:
        stack = []
        for t in tokens:
            if t not in {"+", "-", "*", "/"}:
                stack.append(t)
            else:
                num1, num2 = stack.pop(), stack.pop()
                stack.append( 
                    int(eval(f'{num2}{t}{num1}') )
                    )
        return int(stack.pop())

注:eval() 函数用来执行一个字符串表达式,并返回表达式的值

       f ' {  }  {   }' :字符串格式化的一种方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值