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:容器不为空(至少有一个元素)

相关推荐
佑白雪乐几秒前
LCR 175. 计算二叉树的深度
算法·深度优先
阿Y加油吧7 分钟前
力扣打卡day07——最大子数组和、合并区间
算法
想吃火锅100511 分钟前
【leetcode】105. 从前序与中序遍历序列构造二叉树
算法·leetcode·职场和发展
圣保罗的大教堂13 分钟前
leetcode 3567. 子矩阵的最小绝对差 中等
leetcode
2401_8318249618 分钟前
嵌入式C++驱动开发
开发语言·c++·算法
靠沿20 分钟前
【优选算法】专题十八——BFS解决拓扑排序问题
算法·宽度优先
cui_ruicheng23 分钟前
C++数据结构进阶:哈希表实现
数据结构·c++·算法·哈希算法·散列表
光电笑映26 分钟前
高阶数据结构之红黑树详解
数据结构
li星野34 分钟前
[特殊字符] 模拟试卷一:C++核心与系统基础(90分钟)答案版
开发语言·c++·算法
二进制星轨1 小时前
leecode-283-移动零-算法题解
算法