当前位置: 首页 > news >正文

简单的括号匹配

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

判断只包含{} [] ()字符的字符串s,是否符合括号匹配的原则:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号

通常是使用栈这种先进后出的数据结构的特性完成。主要是说明一个技巧。

使用栈stack存储遇到的左括号,一旦遇到右括号,就和栈顶的字符比较,看是否匹配,比如

]对应栈顶的[,)对应栈顶的(,}对应栈顶的{。

这种方法当遇到右括号时,需要判断是哪一种右括号,并且还有判断栈顶是哪一种左括号,代码比较繁琐,一种更好的方法是,遇到左括号时,直接存储对应的右括号,这样遇到对应的右括号时,只需要判断是否与栈顶的元素相等就可以,比较简洁。

注意第一个为右括号时,栈中没有存储元素出现的存储越界情况。

参考代码如下:

class Solution {
public:
    bool isValid(string s) {
        stack<char> st;//存储括号字符
        if (s.length() % 2 != 0)//奇数不可能匹配
            return false;
        for (int i = 0; i < s.length(); ++i) {//一个一个遍历字符
            if (s[i] == '(')//遇到左括号,直接存储对应的右括号
                st.push(')');
            else if (s[i] == '{')
                st.push('}');
            else if (s[i] == '[')
                st.push(']');
            else {//遇到右括号
                if (st.size() == 0 || s[i] != st.top())//直接判断是否等于栈顶的字符,而不用使用多个判断,判断是否是对应的左括号,st.size()是第一个字符就是右括号的情况,避免栈越界访问
                    return false;
                else//匹配,出栈
                    st.pop();
            }
        }

        return st.empty();//为空,说明所有的括号都匹配
    }
};

相关文章:

  • stack和queue
  • Hadoop/Spark 生态
  • 【区块链安全 | 第六篇】NFT概念详解
  • MFC中字符串string类型和CString类型互转方法
  • SpringMVC拦截器
  • 简单聊聊Oracle和MySQL数据库的区别和使用场景
  • 基于yolov11的棉花品种分类检测系统python源码+pytorch模型+评估指标曲线+精美GUI界面
  • TDengine 集群节点管理
  • SQL的核心基础语法 | 快速入门MySQL
  • 【mysql疑难杂症】mysql数据库指定ip远程连接数据库
  • Mybatis中 ${} 和 #{} 的区别
  • C++项目:高并发内存池_下
  • dell 台式机 电脑 纽扣电池 如何取下?
  • 【NLP 44、实践 ⑪ 用Bert模型结构实现自回归语言模型的训练】
  • c#个人向总结
  • 【Linux网络】——Socket网络编程
  • optimization和compression理解
  • conda install 慢
  • Visual Studio 2019 Qt QML 项目环境搭建常见问题处理方法
  • 飞速(FS)企业网布线解决方案:赋能能源行业客户高效网络部署与智能化管理
  • 哈马斯官员:进一步停火谈判毫无意义
  • 许昌市场监管部门对胖东来玉石开展日常检查:平均毛利率不超20%
  • 解放日报头版:上海张江模力社区托举“年轻的事业”
  • “名额5分钟抢完”,一场花费上万元:越野赛凭什么这么火?
  • 用小型核反应堆给数据中心供电,国内企业正在开展项目论证
  • 魔都眼|西岸国际咖啡生活节:连接艺术、音乐与宠物