20.有效的括号
发布日期:2021-05-09 06:57:34 浏览次数:16 分类:博客文章

本文共 1759 字,大约阅读时间需要 5 分钟。

20.有效的括号

目录

题目

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

有效字符串需满足:

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以正确的顺序闭合。

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

思路

运用栈的思想,将左半边的符号压入栈中,只要遇到右半边与之对应的符号,就将其出栈。最终,只要两边完全抵消,就表明括号都是一一对应的,也就是有效的。

  • 初始化栈stack
  • 依次处理表达式的每个括号。
  • 如果遇到左半边括号,推入栈中,稍后处理。
  • 如果遇到右半边的括号,检查栈顶的元素是否为对应的左半边括号,如果是,就弹出栈,不是的话,直接无效。
  • 最后的最后,如果栈中还有残留,说明表达式存在无效的括号。

代码实现

package leetcode.pac20;import java.util.HashMap;import java.util.Stack;/** * @auther Summerday */public class ValidBrackets {    public static void main(String[] args) {        ValidBrackets validBrackets = new ValidBrackets();        String testString = "(((";        System.out.println(validBrackets.isValid(testString));    }    private HashMap
mappings; public ValidBrackets() { this.mappings = new HashMap
(); this.mappings.put(')', '('); this.mappings.put(']', '['); this.mappings.put('}', '{'); } public boolean isValid(String s) { //初始化栈 Stack
stack = new Stack
(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); //如果遇到右半边的括号的话 if (this.mappings.containsKey(c)) { //取栈顶元素,如果栈为空,给栈顶元素暂时赋值,不然后面会出现 //EmptyStackException char topElement = stack.empty() ? '#' : stack.pop(); //栈顶元素和匹配值不相符,直接返回错误 if (topElement != this.mappings.get(c)) { return false; } } else { //如果没有遇到右半边的括号,将左半边入栈 stack.push(c); } } //两边完全抵消,即为有效符号 return stack.isEmpty(); }}

复杂度分析

  • 时间复杂度:O(n),因为每次只遍历字符串中的一个字符并在栈上进行O(1)的推入和推出操作。n为字符串的字符数量。
  • 空间复杂度:O(n),最糟糕的情况,就是全部都是左半边括号,一直往里推,最终把所有的都推进去。同样地,n为左半边的符号的最大数量。
上一篇:Java面向对象之接口(一)
下一篇:Java之抽象类与抽象方法

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年05月11日 08时07分43秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Elasticsearch面试题 2025-03-29
element ui 时间日期选择器 el-date-picker 报错 Prop being mutated “placement“ 2025-03-29
Hibernate二级缓存配置 2025-03-29
element 如何使用自定义icon图标 2025-03-29
element-plus修改主题颜色 2025-03-29
element-plus的el-date-picker日期范围选择控件,根据开始日期限定结束日期的可选范围为开始日期到开始日期+30天 2025-03-29
18 个一线工作中常用 Shell 脚本【实用版】 2025-03-29
element-ui:el-input输入数字-整数和小数 2025-03-29
ElementUI-el-progress改变进度条颜色跟文字样式 2025-03-29
ELK原理与介绍(转) 2025-03-29
ELK学习笔记(三)单台服务器多节点部署 2025-03-29
ELK应用日志收集实战 2025-03-29
elTable火狐浏览器换行 2025-03-29
15个Python数据处理技巧(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
2023年深信服、奇安信、360等大厂网络安全校招面试真题合集(附答案),让你面试轻松无压力! 2025-03-29
2024年全国程序员平均薪资排名:同样是程序员,为什么差这么多?零基础到精通,收藏这篇就够了 2025-03-29
0基础成功转行网络安全工程师,年薪30W+,经验总结都在这(建议收藏) 2025-03-29
100个电脑常用组合键大全(非常详细)零基础入门到精通,收藏这篇就够了 2025-03-29
10个程序员可以接私活的平台 2025-03-29
10个运维拿来就用的 Shell 脚本,用了才知道有多爽,零基础入门到精通,收藏这一篇就够了 2025-03-29