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

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.xdnf.cn/news/18503.html

相关文章:

  • Flutter 线程模型详解:主线程、异步与 Isolate
  • 机器学习中的两大核心算法:k 均值聚类与集成学习
  • Linux之Ansible自动化运维(二)
  • 分布式集群压测+grafana+influxdb+Prometheus详细步骤
  • 小程序个人信息安全检测技术:从监管视角看加密与传输合规
  • 【StarRocks】-- SQL CTE 语法
  • Ubuntu22.04安装VMware Tools
  • STM32H750 CoreMark跑分测试
  • Chrome/360 浏览器 WebUI 资源底层机制解析:共享资源与专属资源的奥秘
  • Web自动化测试:测试用例流程设计
  • 如何处理项目中棘手的依赖版本冲突问题
  • Eino 框架组件协作指南 - 以“智能图书馆建设手册”方式理解
  • PHP:历经岁月仍熠熠生辉的服务器端脚本语言
  • 三大图计算框架深度对比
  • 桥梁设计模式
  • IPSec 安全基础
  • 域名污染怎么清洗?域名污染如何处理?
  • 无人机长距离高速传输技术解析
  • DAY44打卡
  • 2026济南国际展会全攻略:玉米及淀粉深加工技术革新新动态
  • 【C++】继承(详解)
  • 2025-08-21 Python进阶6——迭代器生成器与with
  • 阿里云搭建flask服务器
  • 【C++】类和对象——默认成员函数(中)(附思维导图)
  • .NET Core MongoDB 查询数据异常及解决
  • 2 Nacos 集群的数据同步机制
  • 服务发现与负载均衡:Kubernetes Service核心机制深度解析
  • 在Excel和WPS表格中合并多个单元格这样最快
  • Web15- Java Web安全:防止XSS与CSRF攻击
  • 银河麒麟V10系统离线安装zabbix-agent教程