leetcode算法(20.有效的括号)

cpp 复制代码
stack<数据类型> 变量名;
  • stack:模板类名,表示栈数据结构

  • <char> :模板参数,指定栈中存储的元素类型为 char

  • st:栈对象的变量名(可自定义)

cpp 复制代码
stack<char> st;
cpp 复制代码
class Solution {
public:
    bool isValid(string s) {
        // 检查字符串长度:如果为奇数,括号不可能完全匹配
        if (s.size() % 2 != 0) return false; 
        
        // 使用栈来存储期望的右括号(用于匹配后续字符)
        stack<char> st;
        
        // 遍历字符串中的每个字符
        for (int i = 0; i < s.size(); i++) {
            // 情况1:遇到左括号 '(',将对应的右括号 ')' 压入栈中
            if (s[i] == '(') st.push(')');
            // 情况2:遇到左括号 '{',将对应的右括号 '}' 压入栈中
            else if (s[i] == '{') st.push('}');
            // 情况3:遇到左括号 '[',将对应的右括号 ']' 压入栈中
            else if (s[i] == '[') st.push(']');
            // 情况4:遇到右括号时的检查
            // 条件1:栈为空 -> 右括号没有对应的左括号
            // 条件2:栈顶元素与当前字符不匹配 -> 括号类型不一致
            else if (st.empty() || st.top() != s[i]) return false;
            // 情况5:栈顶元素与当前右括号匹配,弹出栈顶元素(完成一对匹配)
            else st.pop(); 
        }
        // 最终检查:如果栈为空,说明所有括号都正确匹配
        // 如果栈不为空,说明还有未匹配的左括号
        return st.empty();
    }
};

empty() 函数返回一个 布尔值(bool):

  • true:容器为空(没有元素)

  • false:容器不为空(至少有一个元素)

相关推荐
微尘hjx7 小时前
【ByteTrack 04】多轨迹算法ByteTrack改进点
算法·yolo·目标检测·目标跟踪·bytetrack·ultralytics·车跟踪
路灯上の马陈9 小时前
二叉树的定义与性质
数据结构·二叉树·树结构·1024程序员节
小蒋观天下11 小时前
雷击与浪涌防护:前端SPD选型、接地网误区,接地不当反而引入干扰
深度学习·算法·机器学习
Bshaya_12 小时前
红黑树详解:概念、规则与插入实现
数据结构·红黑树·二叉搜索树·平衡树·插入逻辑
WBluuue13 小时前
数据结构与算法:分块(一):块状数组、块状链表
数据结构·c++·算法·链表
圣保罗的大教堂13 小时前
leetcode 3619. 总价值可以被 K 整除的岛屿数目 中等
leetcode
路灯上の马陈14 小时前
数据结构-树
数据结构·1024程序员节
澳鹏Appen14 小时前
澳鹏重磅发布ExamOCRBench:面向端到端试卷判分的多任务基准
算法·benchmark·基准评测
benjormin14 小时前
Java数据结构 二叉搜索树
数据结构·算法