当前位置: 首页 > news >正文

[算法] [leetcode-20] 有效的括号

20 有效的括号

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = “()”

输出:true

示例 2:

输入:s = “()[]{}”

输出:true

示例 3:

输入:s = “(]”

输出:false

示例 4:

输入:s = “([])”

输出:true


 class Solution {public boolean isValid(String s) {if(null ==  s) {return true;}char[] charArray = s.toCharArray();Stack<Character> characterStack = new Stack<>();for (char charSingle : charArray) {characterStack.push(charSingle);}Set<Character> leftCharacterSet = new HashSet<Character>();leftCharacterSet.add('(');leftCharacterSet.add('[');leftCharacterSet.add('{');Set<Character> specialCharacterSet = new HashSet<Character>();specialCharacterSet.add('(');specialCharacterSet.add('[');specialCharacterSet.add('{');specialCharacterSet.add('}');specialCharacterSet.add(']');specialCharacterSet.add(')');boolean flag = true;while(!characterStack.isEmpty()){Character leftCharacter = null;Character tmpArray[] = new Character[s.length()];int index = 0;while (!characterStack.isEmpty()){Character tmpChar = characterStack.pop();if(leftCharacterSet.contains(tmpChar)){leftCharacter = tmpChar;break;}tmpArray[index++] = tmpChar;}if(leftCharacter == null) {for(int i=index-1; i>=0 ;i--){if(specialCharacterSet.contains(tmpArray[i])){flag = false;break;}}if(!flag){break;}}if(index == 0) {flag = false;break;}Character matchCharacter = findMatchCharacter(leftCharacter);for(int i=index-1; i>=0 ;i--){if(matchCharacter.equals(tmpArray[i])){// 匹配后重新塞入for(int j=i-1; j>=0; j--){characterStack.push(tmpArray[j]);}break;} else if(specialCharacterSet.contains(tmpArray[i]) && !matchCharacter.equals(tmpArray[i])){flag = false;break;}}if(!flag){break;}}return flag;}public Character findMatchCharacter(Character leftChar) {if (leftChar.equals('(')) {return ')';}if (leftChar.equals('[')) {return ']';}if (leftChar.equals('{')) {return '}';}return '|';}}
http://www.lryc.cn/news/512857.html

相关文章:

  • R语言入门笔记:第一节,快速了解R语言——文件与基础操作
  • 【亚马逊云】基于Amazon EC2实例部署 NextCloud 云网盘并使用 Docker-compose 搭建 ONLYOFFICE 企业在线办公应用软件
  • java Redisson 实现限流每秒/分钟/小时限制N个
  • 【漫话机器学习系列】029.累积分布函数(Cumulative Distribution Function)
  • 设计模式之访问者模式:一楼千面 各有玄机
  • AI 编程的世界:用Cursor编写评分项目
  • Cesium教程(二十三):Cesium实现下雨场景
  • SpringCloudAlibaba技术栈-Higress
  • uniapp 微信小程序开发使用高德地图、腾讯地图
  • Springboot:后端接收数组形式参数
  • Postman[2] 入门——界面介绍
  • 1月第四讲:Java Web学生自习管理系统
  • 【Redis】Redis 典型应用 - 缓存 (cache)
  • HTML——38.Span标签和字符实体
  • ROS2+OpenCV综合应用--10. AprilTag标签码追踪
  • python Celery 是一个基于分布式消息传递的异步任务队列系统
  • 嵌入式硬件杂谈(七)IGBT MOS管 三极管应用场景与区别
  • 麒麟信安云在长沙某银行的应用入选“云建设与应用领航计划(2024)”,打造湖湘金融云化升级优质范本
  • 好用的随机生成图片的网站
  • 添加 env 配置,解决import路径问题
  • Go work stealing 机制
  • 基础数据结构--二叉树
  • 《C++设计模式》策略模式
  • JavaScript学习记录6
  • 如何在没有 iCloud 的情况下将数据从 iPhone 传输到 iPhone
  • Doris安装部署
  • [服务器][教程]Ubuntu24.04 Server开机自动挂载硬盘教程
  • io多路复用, select, poll, epoll
  • k8s-1.28.2 部署prometheus
  • 记录第一次跑YOLOV8做目标检测