发布时间:2026/7/28 17:26:10
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/7/28 17:26:10

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

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

2026/7/28 17:21:10

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

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

2026/7/28 18:31:39

如何创建.babelrc文件?

方法一:根目录下,创建 .babelrc. 文件名就可以了! 方法二:cmd进入根目录,输入 type null>.babelrc ,回车即可!

2026/7/28 18:31:39

0基础入门java安全(一)--CC1基础分析

0基础入门Java安全(一)-- CC1基础分析 如果你刚接触Java安全,可能会被“反序列化漏洞”、“链式调用”、“CC链”这些名词吓到。别慌,今天我们就从零开始,拆解Java安全中最经典的入门案例:CC1链&#xff08…

2026/7/28 18:31:39

6岁患儿临床试验离世后:仇子龙Nature论文事件

一则国际顶刊调查报道,揭开一场罕见病个体化基因编辑人体试验的悲剧;紧随其后,学术博主公开质疑相关《Nature》论文数据存在异常。上海交通大学医学院仇子龙团队 CHD3 碱基编辑研究事件,同时牵动人体临床试验伦理监管、学术论文数…

2026/7/28 18:26:39

PHP:使用回调函数处理数组的函数

使用回调函数处理数组的函数: 1.array_filter(); 过滤数组中的值.** <?php $arrarray(0,linux,123,hello,false,array(),0);$arr2array_filter($arr);echo <pre>; print_r($arr2); echo </pre>;?>结果是 Array ([1] > linux[2] > 123[3] > hello…

2026/7/28 13:41:25

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

一、背景与测试方案 在实际项目交付中&#xff0c;PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及&#xff1a;多源PDF的文件流合并、页面级水印渲染&#xff08;含透明度混合与图层叠加&#xff09;、输出文件体积控制。看似简单的操作…

2026/7/28 0:03:34

学术论文研究创新点梳理与核心价值提炼指南

本科毕业论文是大学四年最大的坎。开题报告憋一周写不出三页&#xff0c;找文献翻遍十几个网站还是缺关键资料&#xff0c;写正文卡壳半天憋不出一句话&#xff0c;降重改到凌晨三点结果逻辑全乱&#xff0c;答辩前一天PPT还没做完。别慌&#xff0c;亲测这四个工具能让你少熬半…

2026/7/28 0:03:34

开发商售楼处数字化升级怎么做?

房企的数字化转型投入正在快速增长&#xff0c;据行业数据显示&#xff0c;2025年房企数字化投入规模已突破800亿元&#xff0c;年复合增长率达35%。售楼处的数字化升级不是单一环节的改造&#xff0c;而是从“获客-展示-成交-服务”全链路的系统升级。数字化升级四步法第一步&…

2026/7/28 0:03:34

模型不再值钱之后,AI 编程工具在争什么

2026 年 7 月&#xff0c;AI 编程工具赛道发生了一个标志性转折&#xff1a;模型本身不再值钱了。当 Kimi K3 开源模型在编程基准上击败 GPT 和 Claude&#xff0c;当 GitHub Copilot 第一次把开源模型纳入选择器&#xff0c;当 OpenAI 把 Codex 并入 ChatGPT 做成三合一超级应…

2026/7/28 4:38:09

3个高效策略:快速掌握Axure中文界面配置

3个高效策略&#xff1a;快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…