数据结构之栈的算法题(OJ)

20. 有效的括号 - 力扣(LeetCode)20. 有效的括号 - 给定一个只包括 '(',')','{','}','','' 的字符串 s ,判断字符串是否有效。有效字符串需满足: 1. 左括号必须用相同类型的右括号闭合。 2. 左括号必须以正确的顺序闭合。 3. 每个右括号都有一个对应的相同类型的左括号。 示例 1:输入:s = "()"输出:true示例 2:输入:s = "()\[\]{}"输出:true示例 3:输入:s = "(]"输出:false示例 4:输入:s = "(\[\])"输出:true示例 5:输入:s = "()"输出:false 提示: * 1 <= s.length <= 104 * s 仅由括号 '()\[\]{}' 组成https://leetcode.cn/problems/valid-parentheses/

题目

题目:给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需要满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

思路分析

括号匹配是栈的经典应用场景。 栈的特点:后进先出。最后出现的左括号,要最先被对应的右括号抵消。

算法流程:

  1. 遍历字符串每一个字符
  2. 遇到左括号 ( { [:直接压入栈中保存
  3. 遇到右括号 ) } ]
    • 如果栈为空:没有左括号与之匹配,直接返回 false
    • 判断栈顶的左括号和当前右括号是否配对,不匹配直接返回 false
    • 匹配成功,弹出栈顶元素
  4. 循环结束,栈必须为空。如果栈里面还有残留左括号,说明括号没有闭合,返回 false。
cpp 复制代码
class Solution {
public:
    bool isValid(string s) {
        stack<char> st;
        for(auto e:s)
        {
            if(e=='['||e=='{'||e=='(')
            st.push(e);
            else
            {
                if(st.empty())
                return false;
                
                if((st.top()!='('&&e==')')||
                (st.top()!='['&&e==']')||
                (st.top()!='{'&&e=='}'))
                return false;
                st.pop();
            }
        }
        
        
        return st.empty();
    }
};
相关推荐
强哥聊算力2 小时前
《算力江湖·英伟达传奇》第七集:ChatGPT出现前夜,英伟达发生了什么?
服务器·人工智能·算法·ai·chatgpt·gpu算力
Android系统攻城狮4 小时前
Linux Gstreamer深度解析之gst_audio_ring_buffer_delay调用流程与实战(七十二)
linux·运维·服务器·gstreamer音视频·音视频进阶
快乐的韭菜根根5 小时前
ubuntu 安装slurm并配置
linux·运维·ubuntu
Navigator_Z5 小时前
LeetCode //C - 1289. Minimum Falling Path Sum II
c语言·算法·leetcode
CCblandy6 小时前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
mmmmath_36 小时前
LeetCode.104.二叉树的最大深度
数据结构·leetcode
倒头就睡的小比特7 小时前
Linux基础指令3
linux·服务器
YangYang9YangYan7 小时前
2027供应链计划校招:数学与应用数学专业如何把预测模型讲成业务决策?
人工智能·sql·算法
jsjzsl27 小时前
递归自改进系统(RSI)的本质是自发对称破缺:智能爆炸有界—— AI研发切记盲目投入
人工智能·python·算法
程序员清风7 小时前
最短路径算法:BFS、Dijkstra 与 Floyd
java·算法·宽度优先