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/

相关新闻

JavaSE:基础入门(一)

JavaSE:基础入门(一)

1、关键字 被java赋予特定含义的单词,特点:全部都是小写 以下是java的关键字列表,先了解下即可,其中void就是关键字,而 Void就不是关键字,只是一个占位符的类 访问控制 private protected public类,方法和变量修…

2026/7/28 17:23:57阅读更多 →
Godot 4 AnimatedSprite2D 实战:让待机与移动动画自动切换

Godot 4 AnimatedSprite2D 实战:让待机与移动动画自动切换

Godot 4 AnimatedSprite2D 实战:让待机与移动动画自动切换角色已经能移动,但如果始终显示同一张图片,游戏仍会显得像在拖动贴纸。AnimatedSprite2D 可以用一个 SpriteFrames 资源管理多组逐帧动画,再根据角色的真实速度切换 idle …

2026/7/28 17:23:57阅读更多 →
独立开发者避坑总结:技术选型中那些看起来很美、用起来想死的决策

独立开发者避坑总结:技术选型中那些看起来很美、用起来想死的决策

独立开发者避坑总结:技术选型中那些看起来很美、用起来想死的决策 一、独立开发者的"技术兴奋陷阱":新奇感与实用性的冲突 独立开发者的技术选型比其他角色更难——因为错误的代价由一个人承担。团队项目中的糟糕选型可以通过多人协作消化&…

2026/7/28 17:23:57阅读更多 →
构建高频交易数据管道:SinaL2量化数据解决方案深度解析

构建高频交易数据管道:SinaL2量化数据解决方案深度解析

构建高频交易数据管道:SinaL2量化数据解决方案深度解析 【免费下载链接】SinaL2 Level2 from dHydra 项目地址: https://gitcode.com/gh_mirrors/si/SinaL2 在量化交易领域,获取实时、准确的Level2行情数据是构建优势策略的关键环节。然而&#x…

2026/7/28 18:44:11阅读更多 →
多模型聚合平台TokenX实战:GPT-5.6、Claude 3.5与Gemini 2.0对比评测

多模型聚合平台TokenX实战:GPT-5.6、Claude 3.5与Gemini 2.0对比评测

1. 项目背景与核心价值2026年的AI领域已经进入多模型协同应用的新阶段。作为一名长期跟踪大模型技术演进的从业者,我最近三个月系统测试了通过TokenX平台聚合调用的GPT-5.6、Claude 3.5和Gemini 2.0三大模型。这种多模型聚合方案正在成为企业级AI应用的新范式——根…

2026/7/28 18:44:11阅读更多 →
Android防撤回神器:免Root永久告别消息撤回烦恼的终极指南

Android防撤回神器:免Root永久告别消息撤回烦恼的终极指南

Android防撤回神器:免Root永久告别消息撤回烦恼的终极指南 【免费下载链接】Anti-recall Android 免root 防撤回神器 ! 项目地址: https://gitcode.com/gh_mirrors/an/Anti-recall 还在为错过重要信息而烦恼吗?当同事撤回工作安排、朋友撤回关键对…

2026/7/28 18:44:11阅读更多 →
研究生论文写作AI工具测评与使用指南

研究生论文写作AI工具测评与使用指南

1. 研究生论文写作的AI工具现状 去年帮导师带研一新生时,有个场景让我印象深刻:凌晨两点收到学生的微信,附件里是第五版论文框架,消息写着"学长,查重率还是降不下来..."。这让我意识到,学术写作工…

2026/7/28 18:44:11阅读更多 →
独立开发一期收尾,有点傻眼了!

独立开发一期收尾,有点傻眼了!

独立开发一期收尾,有点傻眼了! 我是一名全栈工程师,最近刚完成了一个独立开发项目的「一期」收尾。本以为能松口气,结果一看数据,直接傻眼了——用户留存率不到 10%,核心功能反馈两极分化,服务器…

2026/7/28 18:44:11阅读更多 →
摒弃碎片化 Prompt 模式,以创源 AIGC 搭建文本、视觉、音频、智能体一体化工业化生产管线。

摒弃碎片化 Prompt 模式,以创源 AIGC 搭建文本、视觉、音频、智能体一体化工业化生产管线。

一、AIGC 工业化演进:单点模型切片与全模态一体化中台的崛起 过去一年,AIGC 的使用方式经历了一个很明显的变化:个人创作可以靠一个聊天窗口、一条 Prompt 或一个图像生成器完成,但只要任务进入团队协作、批量交付、品牌一致性和可…

2026/7/28 18:42:10阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/28 4:06:39阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/28 2:08:06阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/28 1:38:28阅读更多 →
告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:29阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:29阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:29阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/27 16:57:54阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/28 3:17:03阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →