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

相关推荐
放羊郎2 小时前
基于ORB-SLAM2算法的优化工作
人工智能·算法·计算机视觉
mask哥2 小时前
力扣算法java实现汇总整理(上)
java·算法·leetcode
如果'\'真能转义说3 小时前
OOXML 文档格式剖析:哈希、ZIP结构与识别
xml·算法·c#·哈希算法
夏日听雨眠3 小时前
数据结构(栈和队列)
数据结构
梦梦代码精4 小时前
BuildingAI 上部署自定义工作流智能体:5 个实用技巧
大数据·人工智能·算法·开源软件
Zephyr_05 小时前
Leedcode算法题
java·算法
流年如夢5 小时前
栈和列队(LeetCode)
数据结构·算法·leetcode·链表·职场和发展
Hello.Reader7 小时前
算法基础(十)——分治思想把大问题拆成小问题
java·开发语言·算法
绛橘色的日落(。・∀・)ノ7 小时前
机器学习之评估与偏差方差分析
算法