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

栈入门,括号匹配问题

利用栈这道题应该很轻松可以解决,下面给出常用的代码:

public static boolean isValid(String s) {// 创建一个栈来保存左括号Stack<Character> stack = new Stack<>();// 遍历字符串中的每个字符for (char c : s.toCharArray()) {// 如果是左括号,则压入栈中if (c == '(' || c == '{' || c == '[') {stack.push(c);}// 如果是右括号,则需要进行匹配判断else if (c == ')') {// 栈不为空且栈顶元素为'('时,匹配成功,弹出栈顶元素if (!stack.isEmpty() && stack.peek() == '(') {stack.pop();}// 否则,匹配失败,返回falseelse {return false;}}else if (c == '}') {// 栈不为空且栈顶元素为'{'时,匹配成功,弹出栈顶元素if (!stack.isEmpty() && stack.peek() == '{') {stack.pop();}// 否则,匹配失败,返回falseelse {return false;}}else if (c == ']') {// 栈不为空且栈顶元素为'['时,匹配成功,弹出栈顶元素if (!stack.isEmpty() && stack.peek() == '[') {stack.pop();}// 否则,匹配失败,返回falseelse {return false;}}// 忽略其他字符(虽然题目已明确只有括号)}// 如果栈为空,则说明所有括号都匹配成功return stack.isEmpty();}

这个代码就很通俗易懂,所有左括号压入栈内,然后遍历三个不同右括号下的情况,虽然好,但是代码过于冗余。

下面给出的这个解法就简单点:

public static boolean isValid(String s) {// 创建一个栈来保存左括号Stack<Character> stack = new Stack<>();// 遍历字符串中的每个字符for (char c : s.toCharArray()) {// 如果是左括号,则压入栈中if (c == '(' || c == '{' || c == '[') {stack.push(c);}// 如果是右括号,则需要进行匹配判断else if (c == ')') {// 栈不为空且栈顶元素为'('时,匹配成功,弹出栈顶元素if (!stack.isEmpty() && stack.peek() == '(') {stack.pop();}// 否则,匹配失败,返回falseelse {return false;}}else if (c == '}') {// 栈不为空且栈顶元素为'{'时,匹配成功,弹出栈顶元素if (!stack.isEmpty() && stack.peek() == '{') {stack.pop();}// 否则,匹配失败,返回falseelse {return false;}}else if (c == ']') {// 栈不为空且栈顶元素为'['时,匹配成功,弹出栈顶元素if (!stack.isEmpty() && stack.peek() == '[') {stack.pop();}// 否则,匹配失败,返回falseelse {return false;}}// 忽略其他字符(虽然题目已明确只有括号)}// 如果栈为空,则说明所有括号都匹配成功return stack.isEmpty();}

换个思路,如果是左括号就压入和它匹配的右括号,这样当是右括号的时候,看弹出的元素是不是等于目前的括号,这样代码一下就缩短了不少。

http://www.lryc.cn/news/435075.html

相关文章:

  • Vue入门学习笔记-表单
  • TCP通信三次握手、四次挥手
  • 【实施文档】软件项目实施方案(Doc原件2024实际项目)
  • BeanFactory vs. ApplicationContext
  • JDBC客户端连接Starrocks 2.5
  • 004——双向链表和循环链表
  • framebuffer帧缓存
  • 24_竞赛中的高效并查集
  • 新手c语言讲解及题目分享(十七)--运算符与表达式专项练习
  • 香帅的金融学讲义:深入剖析与解读
  • java基础-IO(6)转换流InputStreamReader、OutputStreamWriter
  • 使用Azure Devops Pipeline将Docker应用部署到你的Raspberry Pi上
  • 91、K8s之ingress上集
  • NISP 一级 | 2.1 密码学
  • 深度学习速通系列:混淆矩阵是什么
  • 综合评价 | 基于熵权-变异系数-博弈组合法的综合评价模型(Matlab)
  • 模板与泛型编程笔记(一)
  • ubuntu 和windows用samba服务器实现数据传输
  • NISP 一级 | 3.2 网络安全威胁
  • 【技术实践】MySQL分表分库全解析:从理论到实战
  • 动手学深度学习(一)简介+预备知识+基础知识(上)
  • dubbo 服务消费原理分析之应用级服务发现
  • QT如何在对话框中插入表格
  • 如何使用SSHFS通过SSH挂载远程文件系统?
  • SEELE 框架是
  • 高教社杯数模竞赛特辑论文篇-2013年B题:碎纸复原模型与算法(续)(附MATLAB代码实现)
  • Java操作Miscrosoft Office各类文件格式的开源免费工具库
  • Redis 缓存淘汰算法策略详解
  • Kubernetes PV生命周期的四个阶段
  • Azure OpenAI models being unable to correctly identify model