DAY11 代码随想录 栈与队列02

20. 有效的括号

注意:在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶相不相等就可以了,比左括号先入栈代码实现要简单的多了!

PYTHON

class Solution:
    def isValid(self, s: str) -> bool:
        # 输入括号为奇数
        if len(s) % 2 == 1:
            return False
        
        # 字典表示括号匹配
        pairs= {")":"(" , "]":"[" ,"}":"{" }
        #创建栈
        stack = []
        # 遍历s
        for i in s:
            # 访问pairs的键
            if i in pairs:
                if not stack or stack[-1]!=pairs[i]:
                    return False
                stack.pop()
            else:
                stack.append(i)
        return not stack

C++

class Solution {
public:
    bool isValid(string s) {
     if (s.size()%2 != 0) return false; //如果s的长度为奇数 则返回false
     stack<char> st;
    for (int i = 0 ;i<s.size(); i++){
        // 遍历到左括号则将左括号对应的右括号压入栈中
        if (s[i] =='(') st.push(')');
        else if (s[i]=='[') st.push(']');
        else if (s[i]=='{') st.push('}');
        // ||逻辑OR运算符
        //如果st为空或匹配不到
        else if (st.empty() || st.top() != s[i]) return false;
        //st.top() == s[i] 栈弹出一个元素
        else st.pop();
    }
    return st.empty();
    }
};

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

class Solution:
    def removeDuplicates(self, s: str) -> str:
        # 递归    
        stack = []
        for i in s:
            # 若stack为空则直接将i压入栈中
            if not stack or i != stack[-1]:
                stack.append(i)
            else:
                stack.pop()

        news = ''.join(stack)
        return news

150. 逆波兰表达式求值

class Solution:
    def evalRPN(self, tokens: List[str]) -> int:
        # 设置两个栈 一个栈存放数字另一个栈存放运算操作
        s_num = []
        for token in tokens:
            try:
                s_num.append(int(token))
            except:
                num2 = s_num.pop()
                num1 = s_num.pop()
                s_num.append(self.evaluate(num1,num2,token))
        return s_num[0]

    def evaluate(self,num1,num2,ope):
        if ope == "+":
            return num1 + num2
        elif ope == "-":
            return num1 - num2
        elif ope == "*":
            return num1 * num2
        # 实现向零截断的除法
        elif ope == "/":
            return int(num1 / float(num2))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值