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

相关推荐
TracyCoder12321 小时前
LeetCode Hot100(3/100)——128.最长连续序列
算法·leetcode
Piar1231sdafa1 天前
【目标检测】竹林与杂草识别_YOLOv26改进算法研究
算法·yolo·目标检测
风筝在晴天搁浅1 天前
hot100 543.二叉树的直径
算法·深度优先
风筝在晴天搁浅1 天前
hot100 102.二叉树的层序遍历
java·算法
张祥6422889041 天前
误差理论与测量平差基础笔记八
笔记·算法·机器学习
进击的小头1 天前
传递函数与系统特性(核心数学工具)
python·算法·数学建模
清酒难咽1 天前
算法案例之回溯法
c++·经验分享·算法
程序员-King.1 天前
day168—递归—二叉树的最大路径和(LeetCode-124)
算法·leetcode·深度优先·递归
源代码•宸1 天前
Leetcode—513. 找树左下角的值【中等】
经验分享·算法·leetcode·面试·职场和发展·golang·dfs
_Soy_Milk1 天前
【算法工程师】—— Pytorch
人工智能·pytorch·算法