稀碎从零算法笔记Day17-LeetCode:有效的括号

题型:栈

链接:20. 有效的括号 - 力扣(LeetCode)

来源:LeetCode

题目描述(红字为笔者添加)

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

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

**正确情况: ( { [ ] } )**错误情况:( { )}

题目样例

示例 1:

复制代码
输入:s = "()"
输出:true

示例 2:

复制代码
输入:s = "()[]{}"
输出:true

示例 3:

复制代码
输入:s = "(]"
输出:false

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

题目思路

题目描述机翻,推荐看英语原文/笑

一开始没思路,看题解对于这种【对称型匹配】,适合用【栈】来匹配

具体思路就是:遍历字符串 ①如果遍历得到的 char 是【左括弧】------这里我们先不讨论是哪一种,那么就在栈中压入一个【对应的右括弧】。 ②如果遍历得到的char是【不是左括弧】,那么就从栈中弹出栈顶元素------ 前提是栈顶元素和 char 是同一种【右括弧】

C++代码

cpp 复制代码
class Solution {
public:
    bool isValid(string s) {
    //利用栈匹配括弧(栈适合做"对称匹配类")
    // 遍历字符串:碰到【左括弧】,往栈中压入【对应的右括弧】
    // 碰到【右括弧】,栈中弹出【对应的左括弧】
    int len=s.length();
    if(len%2 != 0)
        return 0;
    stack<char> stack_ch;
    for(int i=0;i<len;i++)
    {
        if(s[i] == '(') 
            {
                stack_ch.push(')');
                continue;
            }
        else if(s[i] == '{') 
            {
                stack_ch.push('}');
                continue;
            }
        else if(s[i] == '[') 
        {
            stack_ch.push(']');
            continue;
        }
        else if(stack_ch.empty() || s[i] != stack_ch.top())//表示栈中没有要匹配的括弧 
            return 0;
        else
            stack_ch.pop();//相等,说明市对应的【右括弧】
            
            
    }
    return stack_ch.empty();//最后如果栈为空,说明【左括弧】和【右括弧】想对应。不为空 说明有多余的【左括弧】
    }
};

结算页面

相关推荐
浅念-17 分钟前
C语言小知识——指针(3)
c语言·开发语言·c++·经验分享·笔记·学习·算法
Hcoco_me39 分钟前
大模型面试题84:是否了解 OpenAI 提出的Clip,它和SigLip有什么区别?为什么SigLip效果更好?
人工智能·算法·机器学习·chatgpt·机器人
burning_maple1 小时前
mysql数据库笔记
数据库·笔记·mysql
hkNaruto1 小时前
【AI】AI学习笔记:LangGraph 与 LangChain的关系以及系统性学习路线选择
笔记·学习·langchain
jrlong1 小时前
DataWhale大模型基础与量化微调task3学习笔记(第 5章:深入大模型架构_MoE 架构解析)
笔记·学习
BHXDML1 小时前
第九章:EM 算法
人工智能·算法·机器学习
却道天凉_好个秋2 小时前
目标检测算法与原理(三):PyTorch实现迁移学习
pytorch·算法·目标检测
无限进步_2 小时前
【C++】大数相加算法详解:从字符串加法到内存布局的思考
开发语言·c++·windows·git·算法·github·visual studio
C+-C资深大佬2 小时前
C++ 数据类型转换是如何实现的?
开发语言·c++·算法
cwplh2 小时前
DP 优化二:斜率优化 DP
算法·动态规划