代码随想录-栈与队列-有效的括号(括号匹配)

题目

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

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

提示:

1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成

题解

经典题目,用栈解决。但也有新的收获。
一般思路:左括号入栈,右括号判断栈顶是否匹配,匹配则栈顶出栈,最后判断栈是否为空
优化思路:如果字符是左括号则让右括号入栈,是右括号则判断与栈顶是否相同(通过这一步可以简化代码),不匹配则返回false,匹配则栈顶出栈。最后判断栈是否为空

代码

class Solution {
public:
    stack<char> st;
    bool isValid(string s) {
        if(s.size() % 2 != 0) return false;//如果字符串长度奇数一定不匹配
        for(auto &c : s){
            if (c == '(') st.push(')');
            else if (c == '{') st.push('}');
            else if (c == '[') st.push(']');
            //第一种情况:左括号则对应的右括号入栈
            else if( st.empty() || c != st.top())return false;
            //第二种情况:栈空 或 右括号和栈顶不匹配
            else st.pop();
            //第三种情况:括号匹配则栈顶出栈
        }
        if(st.empty())return true;
        else return false;
    }
};
posted @   NeroMegumi  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示