【LeetCode】20. 有效的括号(Java自用版)

首先,我们定义一个isValid方法,该方法接受一个字符串s作为参数,并返回一个布尔值来表示该字符串是否有效。

public boolean isValid(String s) {// 如果字符串为空,则自然是有效的if (s.isEmpty())return true;// 创建一个栈,用于存储遍历过程中遇到的左括号Stack<Character> stack = new Stack<>();// 遍历字符串中的每个字符for (char c : s.toCharArray()) {// 如果字符是左括号('('、'{' 或 '[')if (c == '(')stack.push('('); // 将左括号压入栈中else if (c == '{')stack.push('{'); // 将左括号压入栈中else if (c == '[')stack.push('['); // 将左括号压入栈中// 如果字符是右括号(')'、'}' 或 ']')else {// 检查栈是否为空,如果为空,说明没有匹配的左括号,返回falseif (stack.isEmpty())return false;// 弹出栈顶的左括号,并与当前右括号进行比较char top = stack.pop();// 如果左右括号不匹配,返回falseif (c != getClosingBracket(top))return false;}}// 如果循环结束后栈为空,说明所有括号都匹配成功,返回true// 如果栈不为空,说明有未匹配的左括号,返回falsereturn stack.isEmpty();
}

在上面的代码中,我们使用了一个辅助方法getClosingBracket,它接收一个左括号字符作为参数,并返回对应的右括号字符。

// 辅助方法,用于根据左括号返回对应的右括号
private char getClosingBracket(char openingBracket) {if (openingBracket == '(')return ')';else if (openingBracket == '{')return '}';else if (openingBracket == '[')return ']';else// 如果不是左括号,返回一个特殊字符(这里使用'\0',但通常不会执行到这一分支)return '\0';
}

isValid方法中,我们首先检查字符串是否为空,如果为空,则自然是有效的,直接返回true

接下来,我们创建了一个栈,用于存储遍历过程中遇到的左括号。

然后,我们遍历字符串中的每个字符。对于每个字符,我们检查它是否是左括号。如果是左括号,我们将其压入栈中。如果字符是右括号,我们首先检查栈是否为空。如果栈为空,说明没有匹配的左括号,返回false。如果栈不为空,我们弹出栈顶的左括号,并使用getClosingBracket方法获取对应的右括号,然后与当前的右括号进行比较。如果它们不匹配,也返回false

最后,在循环结束后,我们检查栈是否为空。如果栈为空,说明所有括号都匹配成功,返回true。如果栈不为空,说明还有未匹配的左括号,返回false

整个流程就是通过遍历字符串,使用栈来辅助匹配括号,最终判断字符串是否有效。

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

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

相关文章

帆软报表在arm架构的linux

有朋友遇到一个问题在部署帆软报表时遇到报错。 问 我在 arm架构的linux服务器上部署帆软报表遇到了一个棘手的问题&#xff0c;你有空帮忙看下嘛。 我看后台日志报的错是 需要升级 gcc、libmawt.so &#xff0c;是系统中缺少Tomcat需要的依赖库&#xff0c;你之前处理过类似…

超级会员卡积分收银系统源码:积分+收银+商城三合一小程序 带完整的安装代码包以及搭建教程

信息技术的迅猛发展&#xff0c;移动支付和线上购物已经成为现代人生活的常态。在这样的背景下&#xff0c;商家对于能够整合收银、积分管理和在线商城的综合性系统的需求日益强烈。下面&#xff0c;罗峰给大家分享一款超级会员卡积分收银系统源码&#xff0c;它集积分、收银、…

机器学习(复试)

学习分类 其学习形式主要分为&#xff1a;有监督学习、无监督学习、半监督学习 有监督 有监督学习&#xff08;supervised learning&#xff09;&#xff0c;需要你事先需要准备好要输入数据&#xff08;训练样本&#xff09;与真实的输出结果&#xff08;参考答案) 预测结…

vector类(一)

文章目录 vector介绍和使用1.vector的介绍2.vector的使用2.1 vector的定义2.2 vector iterator的使用2.3 vector空间增长问题2.4 vector增删查改2.5 vector迭代器失效问题 3.vector 在OJ中的使用 vector介绍和使用 1.vector的介绍 vector是表示 可变大小数组的 序列容器。 就…

四、harmonyos实操一个toDoItem待办列表

官方讲的很大概&#xff0c;有些细节得去看源码才能知道&#xff0c;不过还是撸出来一个简易版的的item了 import image from ohos.multimedia.image;Entry // 表示入口 Component struct Index {State isComplete:boolean false;private totalTasks: Array<string> […

《数据结构学习笔记---第五篇》---链表OJ练习上

目录 CM11链表分割 OR36 链表的回文结构 160.相交链表 141&142环形链表 CM11链表分割 step1:思路分析 1.首先可以想到&#xff0c;我们可以将原链表的元素划分到两个新的链表之中&#xff0c;由于必须保持顺序&#xff0c;所以新链表我们要用尾插。 2.为了方便进行尾插我…

自动化与智能化并行:数字化运维体系助力企业腾飞

文章目录 文章目录 文章目录 一、引言二、数字化运维体系的核心要素三、构建数字化运维体系的策略四、数字化运维体系的实施与挑战主要内容读者对象 一、引言 随着信息技术的迅猛发展&#xff0c;数字化转型已成为企业提升竞争力、实现可持续发展的必由之路。在数字化转型的过…

JSP – 支持WORD上传的富文本编辑器

1.下载示例 https://gitee.com/xproer/zyoffice-tinymce5 2.引入组件 3.配置转换接口 效果 泽优Office文档转换服务(zyOffice) 功能&#xff1a;一键导入Word转HTML&#xff0c;不装控件&#xff0c;不装Office&#xff0c;任意平台兼容(Windows,macOS,Linux,安卓Android,苹果…

Java文件基本操作入门指南

Java文件基本操作入门指南 文章目录 Java文件基本操作入门指南前言一、文件的基本操作1、文件的创建2、文件的写入3、文件的读取4、文件的删除 二、进阶操作与技巧1、文件的复制与移动2、文件内容的追加3、随机访问文件4、文件路径与名称操作 三、最佳实践与注意事项1、异常处理…

flutter boost 如何从native跳转到flutter页面

Flutter Boost 是一个 Flutter 插件&#xff0c;它可以帮助开发者在原生应用和 Flutter 应用之间无缝跳转。以下是一些基本步骤&#xff0c;展示了如何使用 Flutter Boost 从原生&#xff08;Native&#xff09;页面跳转到 Flutter 页面。 ### 1. 配置 Flutter Boost 在你的 …

【GPU系列】选择最适合的 CUDA 版本以提高系统性能

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

什么是数据仓库

数据仓库定义 数据仓库,按照传统的定义,数据仓库是一个面向主题的、集成的、持久的(非易失的)、反映历史变化(随时间变化),用来支持管理人员决策的数据集合。 通俗讲,企业希望能够更快得处理比较多的数据,数据仓库由此诞生。 就像是企业的财务系统。各个部门(面向主…

nvm安装以后,node -v npm 等命令提示不是内部或外部命令

因为有vue2和vue3项目多种&#xff0c;所以为了适应各类版本node,使用nvm管理多种node版本&#xff0c;但是当我按教程安装nvm以后&#xff0c;nvm安装以后&#xff0c;node -v npm 等命令提示不是内部或外部命令 首先nvm官网网址&#xff1a;https://github.com/coreybutler/…

数据结构——栈(C语言版)

前言&#xff1a; 在学习完数据结构顺序表和链表之后&#xff0c;其实我们就可以做很多事情了&#xff0c;后面的栈和队列&#xff0c;其实就是对前面的顺序表和链表的灵活运用&#xff0c;今天我们就来学习一下栈的原理和应用。 准备工作&#xff1a;本人习惯将文件放在test.c…

[C++]深入解析:如何计算C++类或结构体的大小

目录 什么是内存对齐 类的成员的存储规则 怎么进行内存对齐&#xff08;介绍规则与例子讲解&#xff09; 什么是内存对齐 内存对齐是指将数据存储在内存中时&#xff0c;按照一定的规则让数据排列在规定的地址上&#xff0c;以提高数据访问的效率和速度。在C中&#xff0c;结…

维修贝加莱工业电脑触摸屏BR 5PP320.0571-39 Power Panel 300工控屏

维修贝加莱工业电脑触摸屏B&R 5PP320.0571-39 Power Panel 300工控屏 贝加莱工业电脑4P3040.01-490 描述 贝加莱电源面板4P3040.01-490 扩展产品类型&#xff1a;HMI/触摸屏 产品编号&#xff1a;4P3040.01-490 B&R 类型名称&#xff1a;HMI/触摸屏 描述 Power…

鸿蒙OS开发问题:(ArkTS)【 RSA加解密,解决中文乱码等现象】

RSA加解密开始构建工具类就是举步维艰&#xff0c;官方文档虽然很全&#xff0c;但是还是有很多小瑕疵&#xff0c;在自己经过几天的时间&#xff0c;彻底解决了中文乱码的问题、分段加密的问题。 首先看官方示例代码(以RSA非对称加解密&#xff08;多次调用doFinal实现分段&a…

TikTok养号怎么做?打破0播放的前提是做好这些

TikTok养号的重要性不必多少&#xff0c;不仅可以在创号初期保障账号安全&#xff0c;后期的账号流量也需要以前期养好账号为前提。下面就给大家分享如何养号的真实操作攻略&#xff01; 一、为什么要养号 &#xff08;1&#xff09;提高系统推荐精准度 系统不了解新账户人设…

spring boot 生成PDF模板文件

1、主要目录 2、maven依赖 <!--工具类依赖--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.19</version></dependency><dependency><groupId>com.alibaba&l…

Python django vue 学生信息管理案例源码

Python django vue 学生信息管理案例源码 运行教程 开发环境 链接地址