千家信息网

怎么判断括号是否有效

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"怎么判断括号是否有效",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么判断括号是否有效"吧!题目给定一个只包括 '(', ')', '{
千家信息网最后更新 2026年11月01日怎么判断括号是否有效

本篇内容主要讲解"怎么判断括号是否有效",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么判断括号是否有效"吧!

题目

给定一个只包括 '(', ')', '{', '}', '[', ']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  • 左括号必须用相同类型的右括号闭合。

  • 左括号必须以正确的顺序闭合。

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

示例 1:

输入: "()"  输出: true

示例 2:

输入: "()[]{}"  输出: true

示例 3:

输入: "(]" 输出: false

示例 4:

输入: "([)]" 输出: false

示例 5:

输入: "{[]}" 输出: true LeetCode 地址:https://leetcode-cn.com/problems/valid-parentheses

解题思路

这道题考察的是就是验证括号的对称性,比如"([{}])"这种字符串就是正确的,应该返回 true,而"([{})]"这种字符串就是错误的,应该返回 false。

从上面的题目可以看出,括号总共分为三类:小括号、中括号和大括号,那么我们可以利用栈先进后出的特性,将所有左边的括号("("、"["、"{")先入栈,然后再碰到右括号时,让它与栈顶的元素进行匹配,比如当遇到")"时,如果栈顶是"(",则说明匹配成功,栈顶元素出栈再继续字符串循环的流程,如果匹配错误就直接返回 false。

假设我们要匹配字符串"(([]))"是否合法?那么执行流程就是这样的。

首先遇到左边括号,先入栈:

接下来又是左边括号,继续入栈:

然后又是左边括号,继续入栈:

接下来是右边括号,与栈顶元素匹配,"[]"为一对合法的括号,匹配成功栈顶元素出栈:

接下来又是右边括号,与栈顶元素匹配,"()"为一对合法的括号,匹配成功栈顶元素出栈:

接下来又是右边括号,与栈顶元素匹配,"()"为一对合法的括号,匹配成功栈顶元素出栈:

当字符串循环结束并且栈为空栈时,则证明此字符串的括号匹配合法,最终的效果如下图所示:

那么接下来我们就用代码来实现一下整个过程...

实现代码一

public boolean isValid(String s) {     int slen = s.length(); // 括号的长度     if (slen % 2 == 1) { // 括号不是成对出现直接返回 false         return false;     }     // 把所有对比的括号存入 map,对比时用     Map map = new HashMap<>();     map.put(')', '(');     map.put('}', '{');     map.put(']', '[');     // 定义栈,用于存取括号(辅助比较)     Stack stack = new Stack<>();     for (int i = 0; i < slen; i++) { // 循环所有字符         char c = s.charAt(i);         if (map.containsKey(c)) { // 为右边的括号,如 ')'、'}' 等             if (stack.isEmpty() || stack.peek() != map.get(c)) { // 栈为空或括号不匹配                 return false;             }             stack.pop(); // 是一对括号,执行出栈(消除左右括号)         } else { // 左边括号,直接入栈             stack.push(c);         }     }     return stack.isEmpty(); }

我们在 LeetCode 中提交一下代码,执行结果如下:

代码解析

以上代码的 map 集合是用于定义括号的匹配规则,比如")"对应的匹配值是"(","]"的匹配值是"["等,然后我们再去循环待验证的字符串,遇到左括号直接入栈,遇到右括号让它与栈顶元素匹配,等到整个字符串循环结束,如果栈为空则说明字符串的括号合法。

复杂度分析

时间复杂度:O(n),遍历了一遍整个字符串。空间复杂度:O(n)。

实现代码二

除了使用栈之外,我们还可以使用借助 Java 中的 replace 方法来实现,我们可以循环的消除字符串中的括号,比如将"()"或"[]"或"{}"循环得替换为空,最后在执行完成之后如果字符串为空,则说明字符串中的括号是合法的,具体实现代码如下:

public boolean isValid(String s) {         int len;         do {             len = s.length();             // 消除成双成对的符号             s = s.replace("()", "").replace("[]", "").                     replace("{}", "");         } while (len != s.length()); // 不能再进行替换了,replace 方法没有替换任何字符         return s.length() == 0;     }

我们在 LeetCode 中提交一下代码,执行结果如下:

从运行结果来看,二者的执行效率相差还是很明显的:

到此,相信大家对"怎么判断括号是否有效"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

括号 字符 字符串 元素 代码 合法 循环 有效 接下来 示例 输入 输出 成功 又是 右边 就是 复杂 复杂度 方法 结果 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市人人互联网科技有限公司 科技股互联网 互联网科技保险 互联网科技有限公司经营范围 盈实互联网科技 善班互联网科技 互联网科技英文翻译 安控科技rtu产品工业互联网 天速互联网络科技有限公司 互联网之后的科技是什么 晓花互联网科技有限公司网址 国大互联网教育科技有限公司工作 浙南科技城互联网大厦建设工程 众安科技工业互联网合作 深圳互联网科技的发展 梅州GM互联网络科技有限公司 互联网时代高科技布局 长沙易易互联网科技有限公司 上海互联网科技园景观 互联网科技创业计划的风险分析 深圳恒合互联网络科技有限公司 河南真二互联网科技有限公司 远信互联网科技 银优互联网科技有限公司 厦门比较好的科技互联网公司 高科技互联网发展前景如何 上海科技产业互联网平台 江苏苏星互联网科技有限公司 陕西云淼互联网科技公司 神州科技互联网有限公司
0