java有效的括号

发布时间:2026/9/16 17:52:04

java有效的括号 题目:给定一个只包括 ‘(’‘)’‘{’‘}’‘[’‘]’ 的字符串判断字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。解题思路:想象一下你正在为你的大学课设编写一个小型编译器编译器的任务之一或称子任务将检测括号是否匹配。我们本文中看到的算法可用于处理编译器正在编译的程序中的所有括号并检查是否所有括号都已配对。这将检查给定的括号字符串是否有效是一个重要的编程问题。我们这个问题中将要处理的表达式可以包含以下三种不同类型的括号(){} 以及[]在查看如何检查由这些括号组成的给定表达式是否有效之前让我们看一下该问题的简化版本在简化后的问题中只含一种类型的括号。这么一来我们将会遇到的表达式是(((((()))))) – VALID()()()() – VALID(((((((() – INVALID((()(()))) – VALID上我们试着用一个简单的算法来解决这一问题。我们从表达式的左侧开始每次只处理一个括号。假设我们遇到一个开括号即 (表达式是否无效取决于在该表达式的其余部分的某处是否有相匹配的闭括号即 )。此时我们只是增加计数器的值保持跟踪现在为止开括号的数目。left 1如果我们遇到一个闭括号这可能意味着这样两种情况此闭括号没有与与之对应的开括号在这种情况下我们的表达式无效。当 left 0也就是没有未配对的左括号可用时就是这种情况。我们有一些未配对的开括号可以与该闭括号配对。当 left 0也就是有未配对的左括号可用时就是这种情况。如果我们在 left 0 时遇到一个闭括号例如 )那么当前的表达式无效。否则我们会减少 left 的值也就是减少了可用的未配对的左括号的数量。继续处理字符串直到处理完所有括号。如果最后我们仍然有未配对的左括号这意味着表达式无效。如果我们只是尝试对原始问题采用相同的办法这是根本就行不通的。基于简单计数器的方法能够在上面完美运行是因为所有括号都具有相同的类型。因此当我们遇到一个闭括号时我们只需要假设有一个对应匹配的开括号是可用的即假设 left 0。但是在我们的问题中如果我们遇到 ]我们真的不知道是否有相应的 [ 可用。你可能会问为什么不为不同类型的括号分别维护一个单独的计数器这可能不起作用因为括号的相对位置在这里也很重要。例如[{]如果我们只是在这里维持计数器那么只要我们遇到闭合方括号我们就会知道此处有一个可用的未配对的开口方括号。但是最近的未配对的开括号是一个花括号而不是一个方括号因此计数方法在这里被打破了。方法栈此外如果仔细查看上述结构颜色标识的单元格将标记开闭的括号对。整个表达式是有效的而它的子表达式本身也是有效的。这为问题提供了一种递归结构。例如考虑上图中两个绿色括号内的表达式。开括号位于索引 1相应闭括号位于索引 6。如果每当我们在表达式中遇到一对匹配的括号时我们只是从表达式中删除它会发生什么在表示问题的递归结构时栈数据结构可以派上用场。我们无法真正地从内到外处理这个问题因为我们对整体结构一无所知。但是栈可以帮助我们递归地处理这种情况即从外部到内部。让我们看看使用栈作为该问题的中间数据结构的算法。算法初始化栈 S。一次处理表达式的每个括号。如果遇到开括号我们只需将其推到栈上即可。这意味着我们将稍后处理它让我们简单地转到前面的 子表达式。如果我们遇到一个闭括号那么我们检查栈顶的元素。如果栈顶的元素是一个 相同类型的 左括号那么我们将它从栈中弹出并继续处理。否则这意味着表达式无效。如果到最后我们剩下的栈中仍然有元素那么这意味着表达式无效。我们来看一下该算法的动画演示然后转到实现部分。代码实例:public class program2test { // Hash table that takes care of the mappings. private HashMapCharacter, Character mappings; // Initialize hash map with mappings. This simply makes the code easier to // read. public program2test() { this.mappings new HashMapCharacter, Character(); this.mappings.put(), (); this.mappings.put(}, {); this.mappings.put(], [); } public boolean isValid(String s) { // Initialize a stack to be used in the algorithm. StackCharacter stack new StackCharacter(); for (int i 0; i s.length(); i) { char c s.charAt(i); // If the current character is a closing bracket. if (this.mappings.containsKey(c)) { // Get the top element of the stack. If the stack is empty, set // a dummy value of # char topElement stack.empty() ? # : stack.pop(); // If the mapping for this bracket doesnt match the stacks top // element, return false. //this.mappings.get(c)是获取c键的值 if (topElement ! this.mappings.get(c)) { return false; } } else { // If it was an opening bracket, push to the stack. stack.push(c); } } // If the stack still contains elements, then it is an invalid // expression. return stack.isEmpty(); } public static void main(String[] args) { program2test n new program2test(); String s {{{}}}; System.out.println(n.isValid(s)); } }文章内容参考https://leetcode-cn.com/problems/valid-parentheses/solution/you-xiao-de-gua-hao-by-leetcode/
延伸阅读

更多相关文章

2026/9/13 22:14:48

基于行空板与ChatGPT API的智能硬件创客项目:乐观新闻播报器

1. 项目概述:当“大牙”遇上AI,一个硬件创客的乐观实验最近在捣鼓行空板,总想着给它找点“不务正业”但又有点意思的活儿。手边正好有个闲置的、造型有点夸张的卡通“大牙”模型,一个念头就冒了出来:能不能让它变成一个…

2026/9/13 2:19:02

物联网安全芯片SE050与MK20微控制器的硬件级防护方案

1. 物联网安全现状与硬件级解决方案的必要性在2023年全球物联网连接设备数量突破290亿台的背景下,安全威胁呈现指数级增长。传统基于软件的安全方案面临三大致命缺陷:密钥存储不安全(43%的物联网攻击源于密钥泄露)、固件易被篡改&…

2026/9/16 17:47:19

EG2163三相半桥驱动芯片:集成双LDO解决电机控制电源可靠性难题

1. 这颗芯片到底解决了什么实际问题?——从电机驱动板“供电混乱”说起我干电机驱动硬件设计快十二年了,经手过上百款无刷电机控制板,最常被客户半夜打电话叫去救火的,不是MOSFET炸了,也不是编码器丢脉冲,而…

2026/9/16 17:47:19

UR3草莓采摘系统:基于ArUco视觉闭环的ROS真实场景落地实践

简介:本资源是一套面向机器人开发与智能农业交叉领域的ROS实践项目,适用于高校自动化、人工智能及农业工程方向的本科生与研究生,解决草莓采摘场景下的视觉识别、位姿估计与机械臂协同控制等核心问题。压缩包共79个文件,包含24个头…

2026/9/16 17:47:19

古籍OCR前端实现:Vue+OpenCV.js浏览器端全流程处理

简介:本资源是一套基于VueJavaScript实现的古籍文字检测与识别系统完整源码,面向计算机类专业本科生、研究生及初学者,适用于毕业设计、课程设计、大作业及项目立项演示等实践场景。系统采用vue-cli构建,支持本地快速启动与多环境…

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/16 0:04:09

PHP源码部署实战:从环境配置到运行情侣游戏全攻略

简介:这是一套面向情侣互动场景的PHP完整源码,集成情侣飞行棋、真心话大冒险、情趣骰子等玩法,并内置完整分销制度,可自定义多种返佣比例,源码完全开源无加密,支持微信无感自动授权登录与第三方授权&#x…

2026/9/15 14:22:53

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/15 21:31:11

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/15 11:42:23

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码