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

这篇博客探讨了如何使用栈数据结构解决编程中的两个经典问题:有效括号匹配和逆波兰表达式求值。对于有效括号问题,通过遍历字符串并使用栈来跟踪未匹配的括号,最后栈为空则表示匹配成功。在逆波兰表达式中,栈用于存储数字和等待运算的符号,遇到运算符时进行相应的计算并将结果压回栈中。这些方法有助于理解和解决算法问题。
摘要由CSDN通过智能技术生成

遇到【匹配】问题可以考虑stack!

20. 有效的括号

力扣

思路:遍历string的每一位,用stack记录,遇到匹配的就pop掉,如果最后stack为空则说明都被匹配,return true。

优化点:如果string的长度为奇数则一定不匹配。

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

力扣

与上一题类似

也可以直接用一个string进行类似stack的操作。注意st.top()变为out.back(),st.pop()变为out.pop_back().

 

150. 逆波兰表达式求值

力扣​​​​​​​
第一次看有点没看懂怎么运算的哈哈哈,但看了动画和说明明白了
大概就是依次push到stack里,遇到当前为【符号】的情况则要计算前面两位数字(e,g: 2 1 +,则需要计算2+1 = 3,然后用3覆盖2 1 +)。遇到数字直接push即可。
int evalRPN(vector<string>& tokens){
    std::stack<long long> st; //注意类型为long long,避免数过大
    for(int i = 0; i < tokens.size(); i++){
        if(tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*"
            || tokens[i] == "/"){
            long long second = st.top(); //注意second和first的顺序!从stack中pop和正常顺序是相反的!
            st.pop();
            long long first = st.top();
            st.pop();
            if(tokens[i] == "+"){
                st.push(first + second);
            } else if (tokens[i] == "-"){
                st.push(first - second);
            } else if (tokens[i] == "*"){
                st.push(first * second);
            } else if (tokens[i] == "/"){
                st.push(first / second);
            }

        } else {
            st.push(stoll(tokens[i]);
        }
    }
    return st.top();
}    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值