数据结构与算法——Java实现 22.有效的括号

目录

22. 有效的括号

思路

接口

数组实现类

有效的括号

力扣


直到有一天,我不会再问离开的人为什么

                                                        —— 24.9.28

22. 有效的括号

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

有效字符串需满足:

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

示例 1:

输入:s = "()"

输出:true

示例 2:

输入:s = "()[]{}"

输出:true

示例 3:

输入:s = "(]"

输出:false

示例 4:

输入:s = "([])"

输出:true

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

思路

将字符串中每一个符号存进栈中,每遇到一个左括号,就将一个与之对应的右括号放入栈顶位置,继续遍历,如果遇到了右括号,将右括号与栈顶元素进行对比,如果栈顶元素与遇到的右括号相等,证明是有效的括号,就将栈顶元素移除出来,使下一个字符继续与栈内元素进行相对比,最终如果栈为空,则代表字符串中括号匹配

接口

public interface Stack<E> {/*向栈顶压入元素Params:value-待压入值Returns:压入成功返回true,否则返回false*/boolean push(E vale);/*从栈顶弹出元素Returns:栈非空返回栈顶元素,栈为空返回null*/E pop();/*返回栈顶元素,不弹出Returns:栈非空返回栈顶元素,栈为空返回null*/E peek();/*判断栈是否为空Returns:空返回true,非空返回false*/boolean isEmpty();/*判断栈是否为满Returns:满返回true,空返回false*/boolean isFull();
}

数组实现类

import java.util.Iterator;public class ArrayStack<E> implements Stack<E>,Iterable<E> {private E[] array;// 栈顶指针private int top;@SuppressWarnings("all")public ArrayStack(int capacity) {this.array = (E[]) new Object[capacity];}/*向栈顶压入元素Params:value-待压入值Returns:压入成功返回true,否则返回false*/@Overridepublic boolean push(E value) {if(isFull()){return false;}array[top] = value;top++;return true;}/*从栈顶弹出元素Returns:栈非空返回栈顶元素,栈为空返回null*/@Overridepublic E pop() {if(isEmpty()){return null;}E e = array[top-1];top--;return e;}/*返回栈顶元素,不弹出Returns:栈非空返回栈顶元素,栈为空返回null*/@Overridepublic E peek() {if(isEmpty()){return null;}E e = array[top-1];return e;}/*判断栈是否为空Returns:空返回true,非空返回false*/@Overridepublic boolean isEmpty() {return top == 0;}/*判断栈是否为满Returns:满返回true,空返回false*/@Overridepublic boolean isFull() {return top == array.length;}@Overridepublic Iterator<E> iterator() {return new Iterator<E>() {int p = top;@Overridepublic boolean hasNext() {return p > 0;}@Overridepublic E next() {E e = array[p-1];p--;return e;}};}
}

有效的括号

import java.util.ArrayList;public class LeetCode20EffectiveChar {public boolean isValid(String s) {ArrayStack<Character> stack = new ArrayStack<>(s.length());for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);if (c == '(') {stack.push(')');}else if (c == '[') {stack.push(']');}else if (c == '{') {stack.push('}');}else {if (!stack.isEmpty() && c == stack.peek()){stack.pop();}else {return false;}}}if (stack.isEmpty()){return true;}return false;}public static void main(String[] args) {LeetCode20EffectiveChar judge = new LeetCode20EffectiveChar();System.out.println(judge.isValid("([{}])"));System.out.println(judge.isValid("(){}[]"));System.out.println(judge.isValid("([])"));// 左右括号顺序不一致System.out.println(judge.isValid("([)]"));System.out.println(judge.isValid("([])"));// 左右括号顺序不一致System.out.println(judge.isValid("({[}])"));// 左右括号顺序不一致System.out.println(judge.isValid("({}[)]"));// 左右括号不一一对应System.out.println(judge.isValid("({[])"));System.out.println(judge.isValid("}])([{"));}
}

力扣

在力扣中提交要用栈的数据结构,不需要用我们自己实现的栈

    Stack<Character> stack = new Stack<>();
class Solution {public boolean isValid(String s) {Stack<Character> stack = new Stack<>();char[] chars = s.toCharArray();//遍历所有的元素for (char c : chars) {//如果是左括号,就把他们对应的右括号压栈if (c == '(') {stack.push(')');} else if (c == '{') {stack.push('}');} else if (c == '[') {stack.push(']');} else if (stack.isEmpty() || stack.pop() != c) {//如果当前字符是右括号://1.首先检查栈是否为空。如果为空,说明没有对应的左括号可以匹配,因此返回false。//2.如果栈不为空,尝试弹出栈顶元素。如果弹出的元素与当前的右括号不匹配,也返回false。return false;}}//最后如果栈为空,说明完全匹配,是有效的括号。//否则不完全匹配,就不是有效的括号return stack.isEmpty();}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1549248.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【网站推荐】favicon图标生成

在制作网站的过程中&#xff0c;图标和 Favicon 是不可或缺的一部分。Favicon 是浏览器标签、书签和其他地方显示的小图标&#xff0c;它不仅可以增强网站的品牌识别度&#xff0c;还能提升用户体验。一个精美的 Favicon 可以让您的网站在众多标签中脱颖而出&#xff0c;吸引用…

信息学奥赛复赛复习06-CSP-J2020-02直播获奖-向上取整、向下取整、整数除法、最大值、最小值、计数排序

PDF文档回复:20240928 1 2020 CSP-J 题目1 优秀的拆分 [题目描述] NOI2130 即将举行。为了增加观赏性&#xff0c;CCF 决定逐一评出每个选手的成绩&#xff0c;并直播即时的获奖分数线。本次竞赛的获奖率为 w%&#xff0c;即当前排名前 w% 的选手的最低成绩就是即时的分数线 …

集合框架 - Map双列集合

01 概述 02 常用方法 03 遍历方式 【快捷键】&#xff1a;ctrlaltv 【说明】&#xff1a;Map.Entry<xx,xx>中&#xff0c;Entry是Map集合中的一个接口&#xff0c;但接口是不能创建对象的&#xff0c;它底层是通过使用Entry的实现类对象来封装键值对数据的。 【说明】&a…

LLM大模型学习:致AI新手掌握这些经验,助你少走三年弯路!

这篇文章&#xff0c;我将结合自己在大模型领域的经验&#xff0c;给大家详细聊聊新人应该如何转行大模型赛道&#xff1f; 比如大模型都有哪些方向&#xff1f;各方向的能力要求和岗位匹配&#xff1f;新手转行大模型常踩的坑和常见的误区&#xff1f;以及入行大模型最顺滑的…

代码为笔,合作作墨,共绘共赢画卷———未来之窗行业应用跨平台架构

合作共赢&#xff0c;代码同创&#xff0c;成就非凡 一、资源整合方面 1.1. 技术资源共享 - 不同的合作伙伴可能在技术领域各有所长。例如&#xff0c;一方可能擅长前端用户界面设计&#xff0c;具有丰富的交互设计经验&#xff0c;能够打造出美观、易用的预订界面&#xff…

Hadoop三大组件之MapReduce(一)

Hadoop之MapReduce 1. MapReduce是什么 MapReduce是一个分布式运算程序的编程框架&#xff0c;旨在帮助用户开发基于Hadoop的数据分析应用。它的核心功能是将用户编写的业务逻辑代码与自带的默认组件整合&#xff0c;形成一个完整的分布式运算程序&#xff0c;并并发运行在一…

Codeforces Round 975 (Div. 2)

传送门&#xff1a;https://codeforces.com/contest/2019 B. All Pairs Segments 题意&#xff1a; 首先样例解释一下&#xff1a; 一共有&#xff1a;[1,2],[1,3],[1,5],[1,6],[1,7],[2,3],[2,5],[2,6],[2,7],[3,5],[3,6],[3,7],[5,6],[5,7],[6,7] 点 1&#xff0c;7 在5个…

使用MessagePipe实现进程间通信

1、MessagePipe介绍 可以用于.NET和Unity上面的高性能的内存/分布式消息传递管道。适用于发布/订阅模式、CQRS的中介模式、Prism中的EventAggregator、IPC&#xff08;进程间通信&#xff09;-RPC等。 支持&#xff1a; 依赖注入过滤器管道更好的事件同步/异步带键值的/无键…

c++11~c++20 内联命名空间

在工作&#xff0c;我们经常会引入第三方库&#xff0c;偶尔会碰到同名的函数和类型&#xff0c;造成编译冲突的问题。一般我们可以使用命名空间&#xff0c;例如 #include <iostream> #include <iostream> using namespace std;namespace S1 {void foo(){cout &l…

基于python数据采集的可视化数据大屏,数据驱动的界面。

众所周知&#xff0c;可视化大屏离不开数据的采集&#xff0c;正式有了各种格式化的数据供给&#xff0c;可视化大屏才千姿百态&#xff0c;在数据采集方面&#xff0c;python优势什么明显&#xff0c;为大家分享一下。 一、python是什么 Python是一种高级、通用、解释型编程…

服装品牌小程序展示承载服务

服装大小品牌众多&#xff0c;还包括多区域的门店商家合作批发、咨询等&#xff0c;品牌或经销商想要获得更多生意&#xff0c;线上渠道往往是必备的&#xff0c;品牌宣传、获客转化及持续的信息干货输出等。 线上渠道多样化&#xff0c;尤其是微信、百度、抖音、快手等平台聚…

具身智能综述:鹏城实验室中大调研近400篇文献,深度解析具身智能

具身智能是实现通用人工智能的必经之路&#xff0c;其核心是通过智能体与数字空间和物理世界的交互来完成复杂任务。近年来&#xff0c;多模态大模型和机器人技术得到了长足发展&#xff0c;具身智能成为全球科技和产业竞争的新焦点。然而&#xff0c;目前缺少一篇能够全面解析…

Linux进程切换以及调度算法

目录 Linux进程切换以及调度算法 Linux进程切换介绍 前置知识 进程切换过程分析 调度算法 补充知识 Linux进程切换以及调度算法 Linux进程切换介绍 前面提到&#xff0c;分时操作系统下&#xff0c;CPU会在多个进程中做高速切换以实现多个进程看似同时执行的&#xff0…

防伪溯源查询系统V1.0.5

多平台&#xff08;微信小程序、H5网页&#xff09;二维码扫码输码防伪溯源查询系统&#xff0c;拥有强大的防伪码生成功能&#xff08;内置多种生成规则&#xff09;、批量导出防伪码数据、支持代理商管理端&#xff08;可批量对自己防伪码进行操作处理&#xff09;、文章资讯…

【深度学习】(10)--ResNet残差网络

文章目录 ResNet残差网络1. 传统卷积神经网络的问题1.1 梯度消失和梯度爆炸1.2 退化问题 2. 解决问题2.1 梯度消失与爆炸2.2 退化问题 3. 残差结构结构归纳 4. BN&#xff08;Batch Normalization&#xff09; 总结 ResNet残差网络 ResNet 网络是在 2015年 由微软实验室中的何…

ComfyUI | 好用的人体 衣服分割工具-③-Layer Style | 超多实用功能 | 强烈推荐

这里为大家分享检测人体的脸部、五官、头发、手臂、腿、脚&#xff0c;上衣、裤子、背景的插件&#xff0c;能够生成出对应的蒙版mask&#xff0c;接入到ComfyUI中&#xff0c;用于后续处理&#xff0c;如局部重绘&#xff0c;换背景等。 &#xff08;需要相关插件的同学可自…

华为LTC流程架构分享

文末附LTC流程管理PPT下载链接~ 前面笔者分享了华为LTC流程相关PPT&#xff0c;应读者需求&#xff0c;今天从架构角度进行再次与读者共同学习下LTC流程架构。 华为LTC流程架构是一个全面且集成的业务流程体系&#xff0c;从线索发现开始&#xff0c;直至收回现金&#xff0c…

Transformer: Attention is all you need

Transformer于2017年提出&#xff0c;最开始应用于NLP领域&#xff0c;随着Transformer的快速发展&#xff0c;在视觉领域中也越来越多的论文或应用用到了Transformer&#xff0c;这里记录一下自己学习的一些知识点。 PDF&#xff1a; 《Attention Is All You Need》 Code: att…

08-Registry搭建docker私仓

08-Registry搭建docker私仓 Docker Registry Docker Registry是官方提供的工具&#xff0c;用于构建私有镜像仓库。 环境搭建 Docker Registry也是Docker Hub提供的一个镜像&#xff0c;可以直接拉取运行。 步骤&#xff1a; 拉取镜像 docker pull registry启动Docker R…

YOLOv5改进:Unified-loU,用于高品质目标检测的统一loU ,2024年8月最新IoU

💡💡💡现有IoU问题点:IoU (Intersection over Union)作为模型训练的关键,极大地显示了当前预测框与Ground Truth框之间的差异。后续研究者不断在IoU中加入更多的考虑因素,如中心距离、纵横比等。然而,仅仅提炼几何差异是有上限的;而且新的对价指数与借据本身存在潜在…