首页 > 编程语言 >算法训练day11 栈与队列 02 LeetCode20

算法训练day11 栈与队列 02 LeetCode20

时间:2023-09-17 23:24:13浏览次数:38  
标签:02 pop st tokens day11 str push else LeetCode20

算法训练day11 栈与队列 02 LeetCode20.1047.150

20.有效的括号:

题目:

20. 有效的括号 - 力扣(LeetCode)

题解:

代码随想录 (programmercarl.com)

  • class Solution
    {
    public:
        bool isValid(string s)
        {
            stack<char> str;
            if (s.size() % 2 == 1)
                return false;
            for (int i = 0; i < s.size(); i++)
            {
                if (s[i] == '(' || s[i] == '[' || s[i] == '{')
                {
                    str.push(s[i]);
                }
                else if (s[i] == ')' || s[i] == ']' || s[i] == '}')
                {
                    if (str.empty())
                    {
                        return false;
                    }
                    if (s[i] == ')' && str.top() == '(')
                        str.pop();
                    else if (s[i] == ']' && str.top() == '[')
                        str.pop();
                    else if (s[i] == '}' && str.top() == '{')
                        str.pop();
                    else
                        return false;
                }
            }
            return str.empty();
        }
    };
    
  • 字符串长度是否奇数遇左括号进栈,遇右括号则判断栈顶是否为对应的左括号,不适则返回false,循环结束判断栈是否为空

  • 卡哥解法:

  • class Solution
    {
    public:
        bool isValid(string s)
        {
            if (s.size() % 2 != 0)
                return false;
            stack<char> str;
            for (int i = 0; i < s.size(); i++)
            {
                if (s[i] == '(')
                    str.push(')');
                else if (s[i] == '{')
                    str.push('}');
                else if (s[i] == '[')
                    str.push(']');
                else if (str.empty() || str.top() != s[i])
                    return false;
                else
                    str.pop();
            }
            return str.empty();
        }
    };
    
  • 补充了栈中没有匹配的括号的情况。

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

题目:

1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode)

题解:

代码随想录 (programmercarl.com)

  • class Solution
    {
    public:
        string removeDuplicates(string s)
        {
            stack<char> st;
            for (char S : s)
            {
                if (st.empty() || st.top() != S)
                {
                    st.push(S);
                }
                else
                    st.pop();
            }
            string result = "";
            while (!st.empty())
            {
                result += st.top();
                st.pop();
            }
            reverse(result.begin(), result.end());
            return result;
        }
    };
    

150.逆波兰表达式求值

题目:

150. 逆波兰表达式求值 - 力扣(LeetCode)

题解:

代码随想录 (programmercarl.com)

  • class Solution
    {
    public:
        int evalRPN(vector<string> &tokens)
        {
            stack<long long> st;
            for (int i = 0; i < tokens.size(); i++)
            {
                if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/")
                {
                    long long num1 = st.top();
                    st.pop();
                    long long num2 = st.top();
                    st.pop();
                    if (tokens[i] == "+")
                        st.push(num2 + num1);
                    if (tokens[i] == "-")
                        st.push(num2 - num1);
                    if (tokens[i] == "*")
                        st.push(num2 * num1);
                    if (tokens[i] == "/")
                        st.push(num2 / num1);
                }
                else
                    st.push(stoll(tokens[i]));
            }
            int result = st.top();
            st.pop();
            return result;
        }
    };
    

标签:02,pop,st,tokens,day11,str,push,else,LeetCode20
From: https://www.cnblogs.com/High-source/p/17710160.html

相关文章

  • 02指针篇
    指针数组#include<stdio.h>intmain(){staticchar*s[]={"black","white","pink","violent"};//指针数组4个元素分别为4个字符串地址char**ptr[]={s+3,s+2,s+1,s};//指针的指针,分别保存第4、3、2、1个元素的地址char***p;//p是一个三级指针p=ptr......
  • 【日常收支账本】【Day02】通过PyCharm集成QtDesigner和PyUIC快速创建界面
    一、集成QtDesigner和PyUICPyCharm集成QtDesigner和PyUIC教程二、在QtDesigner中画出窗体1.主界面编辑账本:新增、修改或删除记录可视化账本:通过不同角度查看收支情况全局配置:根据自身实际情况定义配置2.编辑账本界面三、创建项目项目结构将UI文件与窗体文件分......
  • 2023 ICPC 网络赛 9.17
    没留够时间准备导致开考的时候耽搁了开场我先写缺省源,抄串了一行,后面才发现。。。然后看了L发现是签到,此时ddw会了A让zsy上去写,我等了一会才把zsy撵下来写L是个失误没沟通好导致我跟ddw都做了D,zsy先后过了DA期间我会了I,ddw会了J,我先上去写,写完没过样例,zsy......
  • 2023-2024-1 20211306 密码系统设计与实现课程学习笔记2
    20211306密码系统设计与实现课程学习笔记2学习任务详情自学教材第九章,提交学习笔记本章是复习C语言中的文件操作内容,结构化从文本文件操作,二进制文件操作两个大内容考虑,以前可能只关注文本文件的操作,我们以后更多的是操作二进制文件。文本文件中考虑字符读写,行读写,任意位......
  • 2023.37 AI辅助医疗诊断
    日常生活看病,有一个难题就是不知道自己要去那个科室,以之前自己去医院看牙齿疼为例,各种搜索确认后才知道要挂口腔内科,中间还有点其它问题医生建议看其它科室,不过最终还算顺利。牙疼尚且如此,更不用说其它罕见病,比如下面链接中的故事。4岁男孩得了罕见病,母亲找了17位专家无果,受自己......
  • 2023.9.17——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午做任务,下午做任务。我了解到的知识点:1.完成任务环境配置;明日计划:1.上课;2.继续完成我的任务;......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》 第二周学习笔记
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......
  • 20211301 学习笔记2
    20211301《Unix/Linux系统编程》学习笔记1教材笔记总结学习目标本章是复习C语言中的文件操作内容,结构化从文本文件操作,二进制文件操作两个大内容考虑,以前可能只关注文本文件的操作,我们以后更多的是操作二进制文件。文本文件中考虑字符读写,行读写,任意位置读写等文件操作......
  • 2023 CSP-J详解
    csp崩了,滚来写题解,悄悄话,我服了今年这么简单我竟然崩了(蒟蒻石锤)话不多,来吧上题目原谅我上来就用四级标题一.T1.1.在C++中,下面那个关键字用于声明一个变量,其值不能被修改?()A.unsignedB.constC.staticD.mutable这个题不用我多说吧,有点常识就知道A.无符号性B.定义......
  • 2021-6-13-ACFly电赛
    仍然是纯笔记默认飞完一个定点飞行后会进入位置锁定模式位置移动有多个模式单位全部是cm厘米BodyHeading才是机头方向XY方向如下所示设置速度单位是cm/s延时也是老延时了但是不能这么写,会导致全系统暂停任务模式执行有个频率为了延时2s,应该写Mode_Inf->auto_coun......