IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 20.有效的括号-力扣(LeetCode) -> 正文阅读

[数据结构与算法]20.有效的括号-力扣(LeetCode)


一、题目及示例(C++实现)

1. 题目

给定一个只包括

‘(’,‘)’ ,‘{’,‘}’,‘[’,‘]’

字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

2. 示例

示例 1:

输入:s = “()”
输出:true

示例 2:

输入:s = “()[]{}”
输出:true

示例 3:

输入:s = “(]”
输出:false

示例 4:

输入:s = “([)]”
输出:false

示例 5:

输入:s = “{[]}”
输出:true


二、思路及图解

一般遇到括号匹配的问题,我们可以首先想到利用栈这个C++中的容器适配器,因为它具有后进先出的特点。

在这个题目中,我们先遍历字符串s的每一个字符,这里的字符全都是括号,我们要判断右括号和离它最近的左括号是否匹配。如果它是左括号
如:‘(’,‘{’,‘[’,那么我们将与之匹配的右括号压入栈中,当遍历遇到s中的右括号,如果此时栈为空,那么证明在遇到这个右括号之前我们没有遇到左括号,即s的第一个字符就是右括号,那么一定是错误的,返回false;或者会有这样一种情况,栈不为空,但是栈中的右括号与其最近的左括号不匹配,这种情况也返回false。否则,将栈顶元素出栈即可。

如果最后栈为空,则证明右括号全部找到了与之匹配的左括号,全都出栈成功,返回true;如果栈不为空则说明存在右括号与左括号不匹配的情况,返回false。

在这里插入图片描述

在这里插入图片描述


三、代码

class Solution {
public:
    bool isValid(string s) {
        stack<char> st;
        for(auto e : s)
        {
            if(e == '(')
            {
                st.push(')');
            }
            else if(e == '{')
            {
                st.push('}');
            }
            else if(e == '[')
            {
                st.push(']');
            }
            //如果栈为空则说明s中全是右括号,返回false。
            //遍历到s中的右括号,如果右括号和栈顶的右括号不匹配,那么是错误的,返回false。
            else if(st.empty() || e != st.top())
            {
                return false;
            }
            //完全符合上述条件,出栈即可。
            else
            {
                st.pop();
            }
        }
        //如果最后栈为空,那么返回true,说明全部匹配成功;否则返回false。
        return st.empty();
    }
};
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-07 11:22:23  更:2022-05-07 11:24:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:55:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码