144.栈和队列:有效的括号(力扣)

题目描述

代码解决

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++)
        {
            // 如果是左括号,则将对应的右括号入栈
            if(s[i] == '(')
            {
                st.push(')');
            }
            else if(s[i] == '{')
            {
                st.push('}');
            }
            else if(s[i] == '[')
            {
                st.push(']');
            }
            // 如果是右括号,检查栈是否为空或栈顶元素是否匹配
            else if(st.empty() || st.top() != s[i])
            {
                return false;
            }
            // 如果栈顶元素匹配当前的右括号,则将栈顶元素弹出
            else
            {
                st.pop();
            }
        }
        
        // 最后检查栈是否为空,如果为空则表示括号匹配有效
        return st.empty();
    }
};
  1. 字符串长度检查

    • if(s.size() % 2 != 0) return false;
    • 如果字符串长度是奇数,直接返回 false,因为括号必须成对出现。
  2. 定义栈

    • stack<char> st;
    • 使用栈来存储括号,方便检查匹配情况。
  3. 遍历字符串

    • for(int i = 0; i < s.size(); i++)
    • 遍历字符串的每一个字符。
  4. 处理左括号

    • if(s[i] == '(') { st.push(')'); }
    • else if(s[i] == '{') { st.push('}'); }
    • else if(s[i] == '[') { st.push(']'); }
    • 如果遇到左括号('(', '{', ''),将对应的右括号(')', '}', '')入栈。
  5. 处理右括号

    • else if(st.empty() || st.top() != s[i])
    • 如果遇到右括号(')', '}', ']'),检查栈是否为空或栈顶元素是否不匹配当前右括号。如果栈为空或不匹配,则返回 false
    • else { st.pop(); }
    • 如果栈顶元素匹配当前右括号,则将栈顶元素弹出。
  6. 检查栈是否为空

    • return st.empty();
    • 最后检查栈是否为空,如果为空则表示括号匹配有效,否则无效。
相关推荐
m0_720245016 小时前
1543.统计好三元组(简单)
开发语言·算法
To_OC7 小时前
LC 560 和为 K 的子数组:前缀和配哈希表,这对组合我是真的服了
javascript·算法·程序员
hans汉斯7 小时前
《软件工程与应用》期刊推荐&10月版面征稿中
图像处理·人工智能·深度学习·算法·音视频·软件工程
叠层归一研究院8 小时前
AGI 系统(八):符号范畴嵌入函子 — SymCat ↪ C_M107 严格化
c语言·开发语言·人工智能·算法·transformer·agi
其美杰布-富贵-李9 小时前
08 进阶评估指标与算法特定指标
人工智能·算法
.道阻且长.9 小时前
5.LeetCode算法习题讲解--双指针--有效三角形的个数
算法·leetcode·职场和发展
我是海飞9 小时前
杰理JL703N SSD1306 OLED(128x64) 点阵屏移植说明
单片机·算法·嵌入式·音频·杰理
wabs66610 小时前
关于图论【最短路径之Bellman_ford 算法(单源有限最短路)|卡码网96.城市间货物运输III的思考】
数据结构·算法·图论·卡码网·bellman_ford·单源有限最短路
wuyk55511 小时前
2.队列:先进先出的线性数据结构
c语言·数据结构·stm32·单片机
lsylalalala12 小时前
常见的排序算法1
数据结构·算法·排序算法