栈的拿手好戏——括号匹配问题

1. 栈的应用——括号匹配问题

链接: link
在这里插入图片描述

2. 思路分析

这道题呢就非常适合用栈来搞:

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s。
定义一个栈,然后我们只需去遍历这个字符串:
如果遇到左括号,就给它入栈;如果遇到右括号,就取栈顶元素与之进行匹配(同时pop掉栈顶元素)
举个例子
在这里插入图片描述
遍历括号字符串,前三个都是左括号,入栈
再往后是一个右括号,那就pop掉栈顶的左括号与之匹配
在这里插入图片描述
匹配成功,继续往后遍历
再往后还是右括号,再去取栈顶元素匹配
在这里插入图片描述
匹配成功;
接着再往后是左括号,入栈
在这里插入图片描述
再往后,右括号,取栈顶匹配
在这里插入图片描述
匹配成功;
再往后,还是右括号,取栈顶元素匹配
在这里插入图片描述
匹配成功,至此字符串遍历结束,全部匹配成功。

但是,上面是匹配成功的情况,那哪些情况会匹配失败呢?

有三种情况:

  1. 第一种就是在匹配的过程中左右括号不匹配
  2. 右括号单身
    即在匹配过程中,遇到右括号,此时去取栈顶元素,但是栈为空,没有左括号去跟它匹配
  3. 左括号单身
    遍历完字符串,都匹配成功,但是最后栈不为空,即还有剩余的单独的左括号,没有右括号来匹配

3. AC代码

在这里插入图片描述
在这里插入图片描述

class Solution {
public:
    bool isValid(string& s) {
        stack<char> st;
        for(auto e:s)
        {
            //如果是左括号就入栈
            if(e=='['||e=='{'||e=='(')
                st.push(e);
            
            //如果是右括号就获取栈顶元素与之匹配
            else if(e==']'||e==')'||e=='}')
            {
                //此时若栈为空,则没有左括号去匹配
                if(st.empty())
                    return false;
                
                char top=st.top();
                st.pop();
                
                //左右括号不匹配
                if((e==']'&&top!='[')
                ||(e==')'&&top!='(')
                ||e=='}'&&top!='{')
                    return false;
            }
        }
        //匹配完所有的右括号之后栈不为空
        return st.empty();
    }
};

相关推荐

  1. 简单应用:括号匹配

    2024-05-03 22:36:05       31 阅读
  2. ----7-9 括号匹配

    2024-05-03 22:36:05       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-03 22:36:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-03 22:36:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-03 22:36:05       82 阅读
  4. Python语言-面向对象

    2024-05-03 22:36:05       91 阅读

热门阅读

  1. Electron-Builder 打包 Vue 项目避坑指南

    2024-05-03 22:36:05       28 阅读
  2. 网络安全新技术:定义未来安全格局

    2024-05-03 22:36:05       36 阅读
  3. ubuntu-meta-22.04桌面版+ros2-humble 镜像

    2024-05-03 22:36:05       34 阅读
  4. 【网络】传输层的特点总结

    2024-05-03 22:36:05       27 阅读
  5. 访问网站提示502 Bad Gateway的原因和解决方法

    2024-05-03 22:36:05       26 阅读
  6. 【RYG】Python技能练习场—查漏补缺(一)

    2024-05-03 22:36:05       37 阅读
  7. springBootAdmin监控

    2024-05-03 22:36:05       28 阅读
  8. Nacos的开源背景和它的主要贡献者是谁?

    2024-05-03 22:36:05       29 阅读
  9. python 之 浅拷贝与深拷贝

    2024-05-03 22:36:05       32 阅读
  10. 宁波涨停板敢死队八大原则

    2024-05-03 22:36:05       22 阅读
  11. 为何软件IT行业重视创新而不是稳定?

    2024-05-03 22:36:05       27 阅读
  12. linux

    linux

    2024-05-03 22:36:05      29 阅读