首页 > 其他分享 >LeetCode | 20 ValidParentheses

LeetCode | 20 ValidParentheses

时间:2024-08-10 17:49:23浏览次数:7  
标签:parenthessesMap 20 public validParentheses stack 括号 ValidParentheses LeetCode

分析

  • 括号成对出现,键值对类型
  • 括号字符序列嵌套出现,不能错位,顺序具有对称性

为什么不用数组这种数据结构来记录数量?因为这种方法不能保证括号的正确顺序。例如,字符串'({[)}]'会被认为是有效的。

栈解决有效括号问题

  • 当遇到一个左括号时,我们需要记住它,以便在后续遇到相应的右括号时能够正确地匹配
  • 当遇到一个右括号时,我们需要检查最近的一个左括号是否与之匹配

进栈和出栈,相当于完成了一次镜像反射。在括号匹配这种具有顺序性和对称性的结构问题上,栈完美符合其要求。

队列:遵循FIFO原则,适用于需要按照元素加入顺序处理数据的场景
栈:遵循LIFO原则,适用于需要按照元素加入的逆序处理数据的场景

主类

public class ValidParentheses {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        Map<Character, Character> parenthessesMap = new HashMap<>();
        parenthessesMap.put(')', '(');
        parenthessesMap.put('}', '{');
        parenthessesMap.put(']', '[');

        for (char c : s.toCharArray()) {
            if (parenthessesMap.containsValue(c)) {
                // 如果是左括号,压入栈
                stack.push(c);
            } else if (parenthessesMap.containsKey(c)) {
                if (stack.isEmpty() || !stack.pop().equals(parenthessesMap.get(c))) {
                    return false;
                }
            } else {
                return false;
            }
        }

        return stack.isEmpty();
    }
}

测试类

public class ValidParenthesesTest {

    @Test
    public void test_ValidParentheses() {
        ValidParentheses validParentheses = new ValidParentheses();
        System.out.println(validParentheses.isValid("(())"));
        System.out.println(validParentheses.isValid("(()]])"));
        System.out.println(validParentheses.isValid("({}{}())"));

    }
}

标签:parenthessesMap,20,public,validParentheses,stack,括号,ValidParentheses,LeetCode
From: https://www.cnblogs.com/dolphinmind/p/18352583

相关文章

  • 2024比赛wp合集
    记录一下最近比赛的wp吧D^3CTFd3note没有限制idx范围,越界任意读写,读malloc地址泄露libc,网上写systemfromExcalibur2import*proc('./pwn')lib('./libc.so.6')el('./pwn')default('h')defadd(idx,size,content):sl(b"276")sl(s......
  • 2024最新版PyCharm下载安装详细教程,Python环境配置和使用指南,零基础保姆级教程
    一、简介PyCharm是一款PythonIDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如,调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等等。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。Pytho......
  • 2024杭电多校第七场
    1004如果r2>2r1且树的直径>2r1,则逃跑方总能逃跑否则攻击方肯定能一步步把其逼到叶子节点#include<bits/stdc++.h>usingnamespacestd;constintN=1e5;intn,s,r1,r2;vector<int>ver[N+5];inlineintread(){intx=0;boolf=1;charch=getchar();for(;ch<'0......
  • 东芝新小黑移动硬盘数据被格式化如何恢复(2024年8月版)
    在数字化时代,数据已成为我们生活和工作中不可或缺的一部分。东芝新小黑移动硬盘,以其便携性和大容量,成为许多用户存储重要数据的首选。然而,当这些宝贵的数据因意外格式化而面临丢失的风险时,我们该如何应对?本文将深入探讨东芝新小黑移动硬盘数据被格式化后的恢复方法,希望帮助用户......
  • NOI 2024
    Day1T1集合(set)容易发现两个序列等价当且仅当,所有数字在序列中出现位置的集合构成集族相等。考虑哈希,对于一个集合\(S\),令它的哈希值为\(f(S)=(\sum\limits_{x\inS}B^x)\modP\),上述条件只需做两遍哈希即可满足。使用莫队维护所有哈希值,时间复杂度\(O(q\sqrtn\lo......
  • VS2010旗舰版VB.NET版本音频剪辑代码2024-8-10
    ImportsSystem.ComponentModelImportsSystem.IOImportsSystem.DiagnosticsImportsSystem.DrawingImportsSystem.Windows.FormsPublicClassForm1PrivateWithEventsbgWorkerAsNewBackgroundWorkerPrivateffmpegPathAsString=“C:\ffmpeg-master-lates......
  • LeetCode | 225 Implement Stack Using Queues
    分析阻塞(Blocking)阻塞操作指的是在调用一个函数或方法时,如果该操作不能立即完成(例如,因为需要等待某个事件的发生,如数据达到或资源可用),那么当前线程或进程会被挂起(暂停执行),直到操作完成为止。在这个等待期间,线程或进程无法执行其他任务。等待:调用方必须等待操作完成独......
  • [HDCTF2019]MFC
    第一次遇到mfc类的题目,写个blog记录一下首先了解一下什么是mfc,百度百科上是这么写的:MFC(MicrosoftFoundationClasses),是微软公司提供的一个类库(classlibraries),以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大......
  • 2024年华为OD机试真题-推荐多样性-C++-OD统一考试(C卷D卷)
    2024年OD统一考试(D卷)完整题库:华为OD机试2024年最新题库(Python、JAVA、C++合集) 题目描述:推荐多样性需要从多个列表中选择元素,一次性要返回N屏数据(窗口数量),每屏展示K个元素(窗口大小),选择策略:1.各个列表元素需要做穿插处理,即先从第一个列表中为每屏选择一个元素,再从第二个列......
  • 蓝桥杯2023年第十四届省赛A组-更小的数
    题目描述小蓝有一个长度均为n且仅由数字字符0∼9组成的字符串,下标从0到n−1,你可以将其视作是一个具有n位的十进制数字num,小蓝可以从num中选出一段连续的子串并将子串进行反转,最多反转一次。小蓝想要将选出的子串进行反转后再放入原位置处得到的新的数字num......