Leetcode.20 有效的括号

news2024/10/10 23:45:10

  关键词:vector, push_back(), pop_back(),  stack, push(), pop(), top()

1.题目

2.解答思路及解答

解答思路:

        左括号需要一个相同的括号,如果是括号嵌套的方式,可以类比“回文数”那题,利用双下标或者双指针遍历。

        但是实际上,会出现括号并列的方式,比如(){} []这样。所以需要遍历整个字符串,在左括号右边寻找相应的),然而这个过程还可能出现({})()这样的并不对称的有效括号形式,因此需要考虑合适的遍历方法。

        这里考虑到的是一种,类似计算器运算的“入栈、出栈”方法。比如在案例({}){}中,从左到右遍历,将遍历的左括号都放入一个vector,当vector最后一个元素,遇到对应的右括号时,就出vector,当vector最后为空时,即说明所有括号都可以按顺序匹配,否则则不能按顺序匹配。

        需要注意的几点是:

        遍历时,如果检测到左括号时,立即对下一位进行匹配,可能出现 下标超限、循环错误的问题。因此最明晰和直白的方法就是:

        遍历时,左括号丢入vector,不做操作。右括号出现时和*vector.end()进行匹配,移除vector最后一个数,这里需要注意,需要时刻注意vector是否为空,能否被移除。

class Solution {
public:
    bool isValid(string s) {
        vector<char> vecChar;
        int iSize = s.size();
        for(int i = 0; i < iSize; ++i)
        {
            if(s[i] == '('||
            s[i] == '{'||
            s[i] == '[')
            {
                vecChar.push_back(s[i]);
            }

            else
            {
                if(vecChar.empty())
                {
                    return false;
                }
                if((*(vecChar.end()-1) == '(' && s[i] == ')')
                ||(*(vecChar.end()-1) == '{' && s[i] == '}')
                ||(*(vecChar.end()-1) == '[' && s[i] == ']')
                )
                {
                    vecChar.pop_back();
                }
                else
                {
                    return false;
                }
            }
        }
        if(vecChar.empty())
        {
            return true;
        }
        else
        {
            return false;

        }

    }
};

3.优秀答案

答案1:map+stack

        该答案中利用map解决了常规思路中需要逐个if判断括号和对应特殊情况的问题。

        并且使用了一种特殊数据结构stack,并且引出了stack的部分函数top(),pop()和push()等。

class Solution {
public:
    bool isValid(string s) {
        int n = s.size();
        if (n % 2 == 1) {
            return false;
        }

        unordered_map<char, char> pairs = {
            {')', '('},
            {']', '['},
            {'}', '{'}
        };
        stack<char> stk;
        for (char ch: s) {
            if (pairs.count(ch)) {
                if (stk.empty() || stk.top() != pairs[ch]) {
                    return false;
                }
                stk.pop();
            }
            else {
                stk.push(ch);
            }
        }
        return stk.empty();
    }
};

作者:力扣官方题解
链接:https://leetcode.cn/problems/valid-parentheses/solutions/373578/you-xiao-de-gua-hao-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

4.技术总结

1

stack<XXX> stk;

栈结构,先入后出
2

stk.top()

栈顶元素

3.stk.push(CCC)将CCC入栈
4.stk.pop()最后一个元素,栈顶元素出栈
5vector<XXX> vct;
6.vct.push_back(CCC)将CCC入容器
7.vct.pop_back()栈尾元素出栈
8.vct.end()

容器尾指针,指向容器最后一个元素后面一个位置,一般遍历vector用itor!=vct.end()进行判断,

如果要指向最后一个元素需要减1使用,

可使用*解引用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2203536.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

shell 脚本批量更新本地git仓库

文章目录 一、问题概述二、解决方法三、运行效果1. windows2. centos 一、问题概述 你是否遇到这样的场景&#xff1a; 本地git仓库克隆了线上的多个项目&#xff0c;需要更新时&#xff0c;无法象svn一样&#xff0c;选中多个项目一起更新。 只能苦逼的一个个选中&#xff0c…

【解决办法】git clone报错unable to access ‘xxx‘: SSL certificate problem

git clone 是 Git 版本控制系统中的一个基本命令&#xff0c;用于从远程仓库复制一个完整的版本库到本地。这个命令不仅复制远程仓库中的所有文件&#xff0c;还复制仓库的历史记录&#xff0c;使得你可以在本地进行版本控制操作&#xff0c;如提交&#xff08;commit&#xff…

YOLO11改进|SPPF篇|引入YOLOv9提出的SPPELAN模块

目录 一、【SPPELAN】模块1.1【SPPELAN】模块介绍1.2【SPPELAN】核心代码 二、添加【SPPELAN】模块2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【SPPELAN】模块 1.1【SPPELAN】模块介绍 下图是【SPPELAN】的结构图&#xff0c;让我们…

AI产品经理面试100问,三天看完一周拿5个offer

Attention(重点掌握) 1.什么是 Attention?为什么要用 Attention?它有什么作用? 2.Attention的流程是什么样的? 3.普通的Attention和Transformer的Self-attention之间有什么关系? 4.什么是Self-attention? Transformer(重点掌握) 1.Transformer是什么&#xff0c;它的基…

socket编程(java)

socket编程&#xff08;java&#xff09; 简介 ​ Socket&#xff08;套接字&#xff09;是计算机网络编程中用于实现网络通信的一种机制。它提供了一种编程接口&#xff0c;允许应用程序通过网络进行数据传输&#xff0c;实现不同主机之间的通信。 ​ Socket可以看作是一种…

多态相关问题

多态 1、概念的概念 通俗来讲&#xff0c;就是多种形态。具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。 例子&#xff1a;新用户 领红包 99 老用户 领红包 2 不常用 领红包 6 符合多态条件&#xff1a; #include <iostream> using …

计算机毕业设计 医院预约挂号系统的设计与实现 Python毕业设计 Python毕业设计选题【附源码+安装调试】

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

力扣之1364.顾客的可信联系人数量

题目&#xff1a; sql建表语句&#xff1a; Create table If Not Exists Customers (customer_id int, customer_name varchar(20), email varchar(30)); Create table If Not Exists Contacts (user_id int, contact_name varchar(20), contact_email varchar(30)); Cre…

qiankun 主项目和子项目都是 vue2,部署在不同的服务器上,nginx 配置

1、主项目配置 1.1 micro.vue 组件 <template><div id"container-sub-app"></div> </template><script> import { loadMicroApp } from qiankun; import actions from /utils/actions.js;export default {name: microApp,mixins: [ac…

react实现实时计时的最简方式

js中时间的处理&#xff0c;不借助于moment/dayjs这样的工具库&#xff0c;原生获取格式化的时间&#xff0c;最简单的实现方式可以参考下面这样。 实现效果 代码实现 封装hooks import { useState, useEffect } from "react";export function useCountTime() {c…

Linux——which-find命令

which命令 查找命令的程序文件&#xff08;二进制 find命令 按文件名查找文件 find / -name "test" 命令 路径(根目录 命令选项 查找文件名 find命令 -name 模糊查询 find / -name "…

Linux:进程控制(三)——进程程序替换

目录 一、概念 二、使用 1.单进程程序替换 2.多进程程序替换 3.exec接口 4.execle 一、概念 背景 当前进程在运行的时候&#xff0c;所执行的代码来自于自己的源文件。使用fork创建子进程后&#xff0c;子进程执行的程序中代码内容和父进程是相同的&#xff0c;如果子进…

Python入门笔记(七)

文章目录 第十五章. 下载数据15.1 csv文件15.2 json文件 第十六章. 使用API16.1 requests 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转&#xff1a;人工智能从入门到精通教程 本文电子版获取…

猫头虎分享已解决Bug || Error: ERESOLVE unable to resolve dependency tree 解决方案

&#x1f42f; 猫头虎分享已解决Bug || Error: ERESOLVE unable to resolve dependency tree 解决方案 摘要 在前端开发中&#xff0c;尤其是使用 Node.js 和 npm 管理依赖时&#xff0c;ERESOLVE unable to resolve dependency tree 错误是很多开发者遇到的常见问题。这个 Bu…

ES 入门 -http-条件查询分页查询查询排序

第一种方法的url 地址: http://192.168.1.108:9200/shopping/_search?qcategory:小米 上述url地址的情况&#xff0c;对应的后面的参数信息包含中文&#xff0c;有些时候也会出现乱码导致无法查询到数据&#xff0c; 第二种方式进行body的row -json的传参方式. { "que…

双十一最值得购买的好物?这四款数码好物一定要收藏好!

随着双十一购物节的脚步日益临近&#xff0c;消费者们的热情也在逐渐升温&#xff0c;大家都在翘首以待这场年度购物狂欢。回顾过去&#xff0c;我在双十一期间入手的不少商品都显得格外物超所值&#xff0c;与平日相比确实省下了不少开支。我很高兴能够分享这些精明的购物心得…

【图论】(一)图论理论基础与岛屿问题

图论理论基础与岛屿问题 图论理论基础深度搜索&#xff08;dfs&#xff09;广度搜索&#xff08;bfs&#xff09;岛屿问题概述 岛屿数量岛屿数量-深搜版岛屿数量-广搜版 岛屿的最大面积孤岛的总面积沉没孤岛建造最大人工岛水流问题岛屿的周长 图论理论基础 这里仅对图论相关核…

《企业实战分享 · SonarQube10.x 代码质量推广手册》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

【AI算法岗面试八股面经【超全整理】——CV】

AI算法岗面试八股面经【超全整理】 概率论【AI算法岗面试八股面经【超全整理】——概率论】信息论【AI算法岗面试八股面经【超全整理】——信息论】机器学习【AI算法岗面试八股面经【超全整理】——机器学习】深度学习【AI算法岗面试八股面经【超全整理】——深度学习】NLP【A…

vbox创建虚拟机后用户没有root 权限

XXX is not in the sudoers file. This incident will be reported. 打开终端输入 Su - 输入密码进入root账户 终端visudo修改配置文件 添加如下代码&#xff1a;Syy ALL(ALL:ALL) ALL 编写完成后保存文件 ctrlO 后输入文件名 sudoers.tmp 后按Enter键 退出编辑器&#xf…