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

CT02-20.有效的括号(Java)

1.思路

先把字符串转换成字符数组
逐个遍历字符
如果遇到左括号,入栈。
如果遇到右括号
(1)判断此时栈是否为空,如果为空,说明没有左括号与右括号匹配,返回false。
(2)取出栈顶元素(反证法)
1)如果此时字符是‘)’,并且栈顶元素不等于‘(’,返回false
1)如果此时字符是‘]’,并且栈顶元素不等于‘[’,返回false
1)如果此时字符是‘}’,并且栈顶元素不等于‘{’,返回false
遍历完整个字符串后,检查栈是否为空。所以返回 st.isEmpty();这一行代码本身既可能返回 true 也可能返回 false,具体取决于在程序执行到这一步时,栈里是否还有剩余的元素。
如果栈为空,说明所有的左括号都找到了匹配的右括号。
如果栈不为空,说明有多余的左括号没有被匹配。

2.代码实现

class Solution {public boolean isValid(String s) {Stack<Character> st = new Stack<>();//for(int i=0;i<s.length();i++)for (char c : s.toCharArray()) {//这边为什么不用for(int i=0;i<s.length();i++){if(s.charAt(i)==‘{'||s.charAt(i)=='[')st.push('(');的原因是 到时候push的时候单个元素入栈//另一种写法for (int i = 0; i < s.length(); i++) {//            char c = s.charAt(i);//            // 遍历左括号,将对应的左括号入栈//            if (c == '(' || c == '[' || c == '{') {//                st.push(c); // 应该推入当前遇到的左括号字符//            }//遍历左括号,入栈if (c == '(' || c == '[' || c == '{') {st.push(c);} else//遇到右括号{// 在匹配右括号前,必须检查栈是否为空。// 如果栈为空,说明没有左括号与之对应,直接返回 falseif (st.isEmpty()) {return false;}//对于输入 ()[]{},你的代码在匹配了 () 之后,就会直接返回 true,完全忽略了后面的 []{}。对于输入 (],代码会因为 ( 和 ] 不匹配而继续执行,但因为没有处理不匹配的情况,最终可能会给出错误的结果。char top = st.pop();if (top == '(' && c != ')') {return false;}if (top == '[' && c != ']') {return false;}if (top == '{' && c != '}') {return false;}}}return st.isEmpty();}// public static void main(String[] args)// {//     String str="(){}[]";//     solution1 s=new solution1();//     System.out.println(s.isValid(str));// }
}
http://www.dtcms.com/a/341977.html

相关文章:

  • 【Linux | 网络】多路转接IO之select
  • Linux软件编程--网络操作
  • FreeRTOS,事件标注组创建,xEventGroupCreate、xEventGroupCreateStatic
  • 【自记】Power BI 中 CALCULATETABLE 第二个及后续参数支持的两种类型说明
  • 基于混合注意力网络和深度信念网络的鲁棒视频水印技术基础理论深度解析
  • 【世纪龙科技】汽车专业虚拟仿真实训基地建设-理实虚一体化实践
  • 【lucene】lucene常用查询一览
  • 一键去除 Windows 图标角标(小箭头、盾牌与双箭头)
  • JeeSite V5.13.0 发布,升级 Spring Boot 3.5,Cloud 2025,AI 1.0,Vite 7
  • ORACLE中如何批量重置序列
  • 如何保证数据库和缓存的一致性?
  • 强化学习中的重要性采样:跨分布复用样本的核心技术
  • 大模型0基础开发入门与实践:第8章 “大力出奇迹”的哲学:大语言模型的核心技术揭秘
  • 【世纪龙科技】汽车专业虚拟仿真实训基地建设方案
  • 嵌入式软件典型架构:层次化模式 vs 递归模式
  • Java Main无法初始化主类的原因与解决方法(VsCode工具)
  • 【Java后端】Spring Boot 实现请求设备来源统计与UA解析全攻略
  • 智慧工厂的 “隐形大脑”:边缘计算网关凭什么重构设备连接新逻辑?
  • 编程刷题-资料分发1 图论/DFS
  • Kotlin-基础语法练习二
  • Android面试指南(四)
  • [新启航]机械深孔加工质控:新启航方案用激光频率梳破解 130mm 深度遮挡瓶颈
  • 闲聊汽车芯片的信息安全需求和功能
  • C# NX二次开发:反向控件和组控件详解
  • 智慧巡检新标杆:智能移动机器人——电力行业的守护者
  • 【数据结构】树与二叉树:结构、性质与存储
  • 解码欧洲宠物经济蓝海:跨境电商突围的战略逻辑与运营范式
  • Vue2+Vue3前端开发_Day5
  • 【PZ-A735T-KFB】璞致fpga开发板 Artix-7 系列之PA-Starlite-初学入门首选 开发板用户手册
  • 《Python 整数列表分类:巧妙将负数移到正数前面》