首页 > 其他分享 >有效的括号(20)

有效的括号(20)

时间:2024-08-19 23:37:11浏览次数:5  
标签:遍历 20 有效 括号 题目 put false zuo

题目描述

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

有效字符串需满足:

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

大体思路

这里我们使用栈这个数据结构来解决,我们从左到右依次遍历,如果是左括号我们就添加一个对应的右括号进入到栈中,然后当我们遍历到右括号的时候我们需要比对当前栈顶元素是不是和当前遍历到的右括号一致,如果一致则弹出栈,如果不一致则说明此时闭合没按照顺序进行和我们的题目要求的不一致,如果我们遍历到栈为空,而此时我们还有括号元素没有遍历完,则说明此时没有左括号来和剩余的右括号进行匹配了,也是不符合题目要求的

代码解析

class Solution {
    public boolean isValid(String s) {

        if (s.length() == 1) {
            return false;
        }

        Map<Character, Character> zuo = new HashMap<>();
        zuo.put('(', ')');
        zuo.put('{', '}');
        zuo.put('[', ']');
        Map<Character, Character> you = new HashMap<>();
        you.put(')', '(');
        you.put('}', '{');
        you.put(']', '[');

        //这是作为一个判断依据,如果你这这个S中全都是左括号的话就返回false;
        boolean temp = false;
        Stack<Character> stack = new Stack<>();
        //这里如果是上来就是右括号开头的就不符合题目要求,直接返回
        if (you.containsKey(s.charAt(0))) {
            return false;
        }
        for (int i = 0; i < s.length(); i++) {
            if (zuo.containsKey(s.charAt(i))) {
                stack.push(zuo.get(s.charAt(i)));
            } else {
                //到这里已经说明S中包含右括号了,不全是左括号了
                temp = true;

                //这里是判断栈如果为空,但此时S中还有元素没有遍历完,那就不能按照我们题目要求的顺序进行闭合了,我们直接返回false
                if (stack.isEmpty() && i <= s.length() - 1) {
                    return false;
                } else if (s.charAt(i) == stack.peek()) {
                    stack.pop();
                    continue;
                } else {
                    return false;
                }
            }
        }

        if (temp == false || !stack.isEmpty()) {
            return false;
        }

        return true;
    }
}

标签:遍历,20,有效,括号,题目,put,false,zuo
From: https://www.cnblogs.com/dfj-blog/p/18368378

相关文章

  • 2024.8.19随笔
    关于迟到这么多天就迟到一次就被抓了个正着/jk今天刚好错过地铁,后来在地铁上碰见了int08,本来他和我都坐的上一班结果今天都迟到了,然后在路上就一直讨论李老和hfu抓住我们的概率。本来我想今天迟到就算了,毕竟刚好错过地铁下一班要等好一会没办法,但int08认为他有很大概率被抓......
  • 2024新寄生蟲二開蜘蛛池版本——码山侠
    寄生蟲二開蜘蛛池版本,必須GBK解壓,PHP8.X版本;後台是super.php$allowedIpPrefix='42.81.132.';  改成你的本機當前C段蜘蛛池是一个为搜索引擎蜘蛛(‌即网络爬虫)‌提供服务的平台,‌旨在提高网站的曝光度和搜索引擎的索引效率。‌‌蜘蛛池的概念源于网络爬虫的工作需求,‌这......
  • [NOI]2024 登山 题解
    好像在洛谷题解区里还没人和我做法一样,,?考场做法,只用到了倍增和线段树,感觉挺好写。考场上从开题到过题只用了2h。最底下有省流版(?)。以下是我考场里比较详细的思路,所以比较长。先考虑如何\(O(n^2)\)做,然后再想优化。容易先想到一个状态数是\(O(n^2)\)的DP,即记录起点,并将向......
  • ControlNeXt: Powerful and Efficient Control for Image and Video Generation(2024,
    ControlNeXt:PowerfulandEfficientControlforImageandVideoGeneration(2024,8)paperGithub进一步在ControlNet上进行了改进,主要针对一下两点对于每一个模块添加一个Zero-Conv也会占用很多显存.Zero-Conv两个模态的输出的mean、var具有差异,导致收敛很慢.针对1,......
  • 20-2 偏导数
    20-2偏导数 先带后求对谁先偏谁写前 ......
  • 2024.8.4~2024.8.18济南北斗学友集训
    8.9晚上原神(原题之神)争霸赛(挑选写过的6题进行比赛)rk前7名可以许一个50r以内的愿望100+100+0+100+??+(30+)=330+18:05Begin18:??T1100pts18:??T2100pts18:54T4100pts19:42T5??ptsO(kn)worst(intree)......
  • 20-1 二重极限
    20-1二重极限 还有曲线......
  • 笔试题(2024/8/19)
    一、简答题1.简述#ifdef、#else、#endif和#iFndef的作用#ifdef、#else、#endif和#ifndef 是C/C++中的预处理指令,用于条件编译。它们的作用是根据条件来控制代码的编译过程。#ifdef(即“ifdefined”)指令用于检查一个宏是否已定义。如果该宏已被定义,则编译下面的代码......
  • [Ynoi Easy Round 2021] TEST_152
    题目链接:[YnoiEasyRound2021]TEST_152一道思路接近却比这道题难点的题目[Ynoi2012]NOIP2015充满了希望经典结论:无论怎么覆盖,总段数都是\(O(覆盖次数)\)的。证明的话,考虑到每次推平只会使得左右端点的段分裂开,使得段数+1,而中间的段直接被覆盖,所以最多总段数只会为......
  • 2024.8 总结
    杂题【YBOJ】Pair题目描述给出二维平面上的\(n\)个点,第\(i\)个点的坐标为\(x_i,y_i\)。定义点\(i\)与点\(j\)之间的距离为\(\frac{|x_i-x_j|+|y_i-y_j|}{\sqrt{(x_i-x_j)^2+(y_i-y_j)^2}}\),求平面上两点的距离最大为多少。($1\len\le10^5$)解题思路首先,我们......