首页 > 其他分享 >Leetcode 20. 有效的括号

Leetcode 20. 有效的括号

时间:2023-06-30 10:57:01浏览次数:31  
标签:map ch 20 stk 括号 return ascii Leetcode

可以将反括号先存入map中,而后如果当前字符能在map中查到,说明是反括号,否则是正括号。

但是结合map的使用和将反括号作为map的key,并不容易第一时间想到。

class Solution {
public:
    bool isValid(string s) {
        int n = s.size();
        if(n % 2) {
            // 如果字符串的长度为奇数,直接可以返回false
            return false;
        }

        // 因为是通过反括号来查找栈中有无对应的正括号,因此key是反括号。
        unordered_map<char, char> pairs = {
            {')', '('}, 
            {']', '['}, 
            {'}', '{'}
        };

        stack<char> stk;
        for (char ch : s) {
        // 这里用count来判断是否map中存入当前字符串(是否是反括号),相比于用迭代器去接收并判断,大大简化了代码量 if(pairs.count(ch)) // 如果对于某一个s中的元素,是反括号 { if (stk.empty() || stk.top() != pairs[ch]) { // 如果栈中没有与ch对应的正括号,或者栈已经为空 return false; } stk.pop(); // 将对应的正括号pop } else { stk.push(ch); } } return stk.empty(); } };

下面是最实用的代码。在栈里存储正括号,而后针对每个输入的反括号,逐一判断对应的栈顶和栈大小。

在判断匹配的正反括号时,也可以结合正反括号的ascii码判断,大大简化代码量。

class Solution {
public:
    bool isValid(string s) {
        stack<char> stk;

        for (auto c : s) {
            if (c == '(' || c == '[' || c = '{') stk.push(c);
            else {
                // (和)的ascii码相差1, [和]的ascii码相差2,{和}的ascii码相差2
                if(stk.size() && abs(stk.top() - c) <= 2) stk.pop();
                else return false;
            }
        }
        // 如果此时stk还不为空,说明有正括号没有与反括号匹配,不是合法的括号序列
        // 如果为空,说明是合法的括号序列
        return stk.empty();
    }
};

 

标签:map,ch,20,stk,括号,return,ascii,Leetcode
From: https://www.cnblogs.com/luxiayuai/p/17516037.html

相关文章

  • 号外!MyEclipse 2023.1.1已发布,更好支持Vue框架
    MyEclipse 2023.1.1是之前发布的2023.1.0的一个小错误修复版本,如果您已经安装了MyEclipse2023,只需检查产品中的更新(Help>CheckforUpdates…)就可以选择这个新版本。或者,下载我们更新的离线安装程序来安装2023.1.1。MyEclipsev2023.1.1离线版下载MyEclipse技术交流群:74......
  • 【leetcode】【83】【删除排序链表中的重复元素】
    c++第一个方法代码#include<algorithm>#include<iostream>#include<memory>#include<vector>//Definitionforsingly-linkedlist.structListNode{intval;ListNode*next;ListNode():val(0),next(nullptr){}......
  • 题解 P8757 [蓝桥杯 2021 省 A2] 完美序列
    题解P8757[蓝桥杯2021省A2]完美序列题意如果一个序列是单调递减的,而且除了第一个数以外的任何一个数都是上一个数的因数,则称这个序列为一个完美序列。一个序列中的一个子序列如果是完美序列,则称为该序列的一个完美子序列。一个序列的最长完美子序列长度,称为该序列的完美......
  • 2023冲刺国赛模拟 27.1
    话说我的习惯是一套题全部改完后才写题解,然而上次的题解停留在\(20.1\),这足以看出近两日的颓废现状。由于昨天晚上做了个噩梦,所以今天的题解先扯点别的。目前初步鉴定噩梦是由FateZero中Caster的行为引起的。比较显然Caster及其御主都是以他人的痛苦为乐的人。在现代......
  • SpringBoot--尚硅谷2018
    #一、SpringBoot入门B站视频地址:72_尚硅谷_结束语_哔哩哔哩_bilibili1、SpringBoot简介简化Spring应用开发的一个框架;整个Spring技术栈的一个大整合;J2EE开发的一站式解决方案;2、微服务2014,martinfowler微服务:架构风格(服务微化)一个应用应该是一组小型服务;可以通......
  • 每日总结2023年6月29日
    今日学习:数据库夏季学期课程了解以及课题选择(快递管理系统)磁盘:SSD不是磁盘,机械硬盘是磁盘,磁盘盘面保存数据,磁盘时用磁头在盘上磁化出一个一个的小磁铁来记录信息(生成磁道,一个磁道上有许多扇区),磁盘的存取时间=寻道时间+等待时间(平均定位时间+转动延迟)下面是例题计算机总线分为:外......
  • 2023年字节阿里等大厂Android岗秋招(校招)它来了,行情预测和面试题汇总
    写在前面前段时间的金三银四相信大家的找工作和面试,有的人从里面收获了心仪的offer;有的人走了一趟,收获寥寥,不甚满意;还有的人在观望,等待下一个良机。那么6月份快过去了,秋招它要来了!!!6.12,科大讯飞“飞行计划”正式启动,整整提前了1个星期!6.14,麦肯锡2024秋招全面启动,比去年提前了半......
  • 【备战金九银十】分享2023 Android中高级面试题大全
    都说今年互联网行情很差,Android行情更差。但到底怎么样呢,不能光听别人说,而要自己走出去看一看。还有两个月就要到金九银十了,那么如何准备即将来临的面试热潮呢?运筹帷幄之后,决胜千里之外!小编从来不打没有准备的战,不管是笔试还是面试都是有章可循的!!面试题,注意看!!非常重要!!对于程序员来......
  • 2023年6月29日22:33:36
    今天是刚刚开始的第一天。上午:我学习了Vue通用后台管理系统项目,但是我发现自己的根本很不理解她所写的语法。下午:我继续学习了一段时间的vue后台管理项目。发现还是看不懂,因为如果自己看不懂,那我也就不可能说去自己能写出东西来。然后我就去学习了JavaScript,但发现还是不是Java......
  • 数据结构和算法-2023.06.29
    斐波那契数列初衷......