前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >有效的括号

有效的括号

作者头像
零式的天空
发布于 2022-03-24 06:59:27
发布于 2022-03-24 06:59:27
30500
代码可运行
举报
文章被收录于专栏:零域Blog零域Blog
运行总次数:0
代码可运行

题目描述

给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:

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

注意: 空字符串可被认为是有效字符串。

示例 1:

输入: “()” 输出: true

示例 2:

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

示例 3:

输入: “(]” 输出: false

示例 4:

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

示例 5:

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

题解

括号匹配是典型的代码分析问题,我们遍历字符串,每次处理一个括号,使用栈来保存这个括号。同时我们使用一个map来保存三种括号的开括号和闭括号。每次处理当前括号的时候,我们判断当前栈顶的元素是否是此括号对应的开括号,是的话,我们将弹出栈顶元素。否则我们将当前括号入栈。最后,如果栈的元素为空,那么可知此字符串是有效的字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public boolean isValid(String s) {
    if (s == null || s.length() == 0) {
        return true;
    }
    Stack<Character> parenthesesStack = new Stack<>();
    HashMap<Character, Character> parenthesesMap = new HashMap<>();
    parenthesesMap.put('(', ')');
    parenthesesMap.put('[', ']');
    parenthesesMap.put('{', '}');
    for (char parentheses : s.toCharArray()) {
        if (!parenthesesStack.isEmpty() && Character.valueOf(parentheses)
                .equals(parenthesesMap.get(parenthesesStack.peek()))) {
            parenthesesStack.pop();
        } else {
            parenthesesStack.push(parentheses);
        }
    }
    return parenthesesStack.isEmpty();
}

复杂度分析

  • 时间复杂度:O(n),因为我们一次只遍历给定的字符串中的一个字符并在栈上进行 O(1) 的推入和弹出操作。
  • 空间复杂度:O(n),当我们将所有的开括号都推到栈上时以及在最糟糕的情况下,我们最终要把所有括号推到栈上。例如 ((((((((((。

来源

有效的括号 | 力扣(LeetCode) 有效的括号 | 题解(LeetCode)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux 下从头再走 GTK+-3.0 (一)
  原本由于项目需求在 Linux 下学习过一段时间的 GTK+2.0 图形开发,时隔一段时间,想真正深入学习一下 GTK 。
RainMark
2019/09/10
2.4K0
Linux 下从头再走 GTK+-3.0 (一)
Python安装cairo、gtk等问题
上一篇博文关于cairo的安装,使用过程中发现,画图还需要gtk等模块,所以需要继续安装。我安装gtk的过程很是折腾啊,下载了好多版本,不同格式文件,但最终还是安装成功了,哈哈,现把安装过程记录如下:
py3study
2020/01/10
2.4K0
glib和glibc_libc.so.6 version GLIBC_2.14
转自:http://blog.csdn.net/yasi_xi/article/details/9899599
全栈程序员站长
2022/09/20
1.8K0
Qt+opencv+EasyPR(车牌识别系统,从配置环境到成功运行)
最近在东软睿道实训搞一个车牌识别系统,所用材料为Qt+opencv+EasyPR,从配环境到成功运行历时几天颇为艰难,这里写篇经验贴,手把手教你~ 作者:张俊怡       2017/7/21      东北大学 俗话说巧妇难为无米之炊,所以得首先准备所需材料: 1、Qt  版本为5.5.1 32位  下载地址为 https://www.qt.io/download/ 2、opencv 版本为3.2.0  下载地址为http://opencv.org/opencv-3-2.html 3、Easy
张俊怡
2018/04/24
3.5K0
Qt+opencv+EasyPR(车牌识别系统,从配置环境到成功运行)
Linux 下从头再走 GTK+-3.0 (五)
  实践中表明,纯粹利用 gtk 函数来创建 UI 是很繁琐的事,需要编写很多代码。怎样才能快速统一的建立 UI 布局呢?
RainMark
2019/09/10
1.1K0
Linux 下从头再走 GTK+-3.0 (五)
pkg-config工具的使用
2、pkg-config软件官网:http://www.freedesktop.org/wiki/Software/pkg-config/
ccf19881030
2019/04/23
3.2K0
pkg-config 用法
在进行使用fuse 2.9写程序的时候,遇到了pkg-config 命令和 .pc 文件。本篇博客就具体说明一下pkg-config 命令是什么?
西湖醋鱼
2020/12/30
2K0
pkg-config 用法
小朋友学C语言(1):安装Codeblocks编程工具
编译器是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的工具。一个现代编译器的主要工作流程:源代码(source code) -->预处理器 (preprocessor) -->编译器 (compiler) -->目标代码 (object code) -->链接器 (linker) -->可执行程序 (executables)。 高级计算机语言便于人类编写、阅读、交流和维护。机器语言是能直接被计算机接解读、运的。编译器将汇编或高级计算机语言源程序(Source program)作为输入,翻译成目标语言(Target language)机器代码的等价程序。源代码一般为高级语言 (High-level language), 如C、C++、Java或汇编语言,而目标语言则是机器语言的目标代码(Object code),有时也称作机器代码(Machine code)。
海天一树
2019/06/03
1.2K0
怎么样Eclipse IDE for C/C++ Developers正确编译GTK规划?(解决)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116778.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/06
5920
gtk还有人用吗_iperf使用方法
GTK+(GIMP Toolkit)是一套源码以LGPL许可协议分发、跨平台的图形工具包。最初是为GIMP写的,已成为一个功能强大、设计灵活的一个通用图形库,是GNU/Linux下开发图形界面的应用程序的主流开发工具之一。并且,GTK+也有Windows版本和Mac OS X版。 GTK+ 是一种图形用户界面(GUI)工具包。也就是说,它是一个库(或者,实际上是若干个密切相关的库的集合),它支持创建基于 GUI 的应用程序。可以把 GTK+ 想像成一个工具包,从这个工具包中可以找到用来创建 GUI 的许多已经准备好的构造块。差不多已经 10 年过去了。今天,在 GTK+ 的最新稳定版本 —— 2.8 版上(3.0测试中),仍然在进行许多活动,同时,GIMP 无疑仍然是使用 GTK+ 的最著名的程序之一,不过它已经不是惟一的使用 GTK+ 的程序了。已经为 GTK+ 编写了成百上千的应用程序,而且至少有两个主要的桌面环境(Xfce 和 GNOME)用 GTK+ 为用户提供完整的工作环境。 GTK+虽然是用C语言写的,但是您可以使用你熟悉的语言来使用GTK+,因为GTK+已经被绑定到几乎所有流行的语言上,如:C++,PHP, Guile,Perl, Python, TOM, Ada95, Objective C, Free Pascal, and Eiffel。
全栈程序员站长
2022/11/01
1.3K0
gtk还有人用吗_iperf使用方法
Ubuntu 14.04 LTS下使用arm-linux-gcc交叉编译OpenCV 2.4.9
本文介绍了如何将OpenCV库移植到ARM平台上,包括编译工具链、依赖库、配置方法以及运行时注意事项。
剑影啸清寒
2018/01/02
9.6K1
Ubuntu 14.04 LTS下使用arm-linux-gcc交叉编译OpenCV 2.4.9
linux ettercap,CentOS下安装ettercap
http://ettercap.sourceforge.net/download.php
全栈程序员站长
2022/09/14
1.2K0
linux ettercap,CentOS下安装ettercap
glib:windows下基于MSYS2环境编译glib2的过程
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/80399355
10km
2019/05/25
3.5K0
史上最强IDE集成开发环境——Code::Blocks简介及安装
Code::Blocks采用两种方法的版本命名,这一点大家需要了解,以免搞胡涂了。
Enjoy233
2019/03/05
3.3K0
史上最强IDE集成开发环境——Code::Blocks简介及安装
GCC编译选项_需要使用安全编译选项的语言
gcc和cc是一样的,c++和g++是一样的。一般c程序就用gcc编译,c++程序就用g++编译
全栈程序员站长
2022/11/15
1.3K0
GCC编译选项_需要使用安全编译选项的语言
全志 Tina Linux 图形系统 框架介绍 最全介绍 MiniGUI、QT5、EFL、GTK+(WebkitGtk、Midori)、DirectFB、Wayland
本文档将介绍 Allwinner Tina Linux 中已经移植好的窗口系统,以及怎么使用,包括 MiniGUI、QT5、EFL、GTK+(WebkitGtk、Midori)、DirectFB、Wayland,整体结构 如下:
韦东山
2022/12/28
17.6K0
全志 Tina Linux 图形系统 框架介绍 最全介绍 MiniGUI、QT5、EFL、GTK+(WebkitGtk、Midori)、DirectFB、Wayland
Windows环境下JDK安装与环境变量配置详细的图文教程
原文作者:souvc 博文出处:http://www.cnblogs.com/liuhongfeng/p/4177568.html
用户1518699
2020/09/16
18.1K0
Windows环境下JDK安装与环境变量配置详细的图文教程
编译LAVFilters
直接下载的地址http://xhmikosr.1f0.de/tools/ 且包含了yasm zlib等已经弄好了。-j8也可以用了,pkg-config都有了。真好。如果不嫌弃麻烦或不怕出现问题本着了解的目的可以自定义安装如下所示。
全栈程序员站长
2022/08/31
2.1K0
将c语言文件打包成exe可执行程序
如何将编写的c语言程序打包成exe可执行文件呢? 以前我们写程序很多是在编辑器上,让编辑起来编译运行我们的程序。如果想将其打包成exe可执行文件该如何做?
兰舟千帆
2022/07/16
3.2K0
将c语言文件打包成exe可执行程序
code blocks使用方法总结「建议收藏」
tips:同一个版本有多个安装文件,官网上有对于各个文件的简要介绍。最好选择 mingw-setup 。
全栈程序员站长
2022/09/20
2.6K0
推荐阅读
相关推荐
Linux 下从头再走 GTK+-3.0 (一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验