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();
    • 最后检查栈是否为空,如果为空则表示括号匹配有效,否则无效。
相关推荐
Dream it possible!4 分钟前
LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)
算法·leetcode·面试·动态规划
心抵鹊29 分钟前
算法之双指针系列(一)
算法·leetcode
十二38 分钟前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
小此方2 小时前
[算法实战论:动态规划]回文串问题的dp解法,回文串问题的母题,以及以此为基础的派生题
算法·动态规划
Pniubi2 小时前
力扣560.和为k的子数组
算法·leetcode·职场和发展
D e re k ZH3 小时前
C++ 从零入门(一):基础语法与程序结构
数据结构·c++·算法
Pniubi3 小时前
力扣438.找到字符串中所有字母异位词
算法·leetcode·职场和发展
東隅已逝,桑榆非晚6 小时前
算法6. 双指针法-查找总价格为目标的两个商品
c++·学习·算法
Eyfcom6 小时前
〖物联网终端实战 01〗UWB 室内高精度定位:仓储 AGV 与人员的厘米级轨迹追踪
物联网·算法·物流系统·快递系统·跨境物流快递系统·物联网终端实战
bro_Java6667 小时前
《排序的底层逻辑:比较、交换与分治》
java·算法·排序算法