栈入门,括号匹配问题
利用栈这道题应该很轻松可以解决,下面给出常用的代码:
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();}
换个思路,如果是左括号就压入和它匹配的右括号,这样当是右括号的时候,看弹出的元素是不是等于目前的括号,这样代码一下就缩短了不少。
相关文章:
栈入门,括号匹配问题
利用栈这道题应该很轻松可以解决,下面给出常用的代码: public static boolean isValid(String s) {// 创建一个栈来保存左括号Stack<Character> stack new Stack<>();// 遍历字符串中的每个字符for (char c : s.toCharArray()) {// 如果是…...
Vue入门学习笔记-表单
可以使用v-model 指令在表单控件元素上创建双向数据绑定。 引言: Vue采用了MVVM(Model-View-ViewModel)架构模式,通过指令可以快速实现数据和视图的双向绑定 修改视图层时,模型层也会改变;修改模型层&#…...
TCP通信三次握手、四次挥手
目录 前言 一、三次握手 TCP三次握手的详细过程 二、四次挥手 四次挥手的详细过程 前言 前面我说到了,UDP通信的实现,但我们经常说UDP通信不可靠,是因为他只会接收和发送,并不会去验证对方收到没有,那么我们说TCP通…...
【实施文档】软件项目实施方案(Doc原件2024实际项目)
软件实施方案 二、 项目介绍 三、 项目实施 四、 项目实施计划 五、 人员培训 六、 项目验收 七、 售后服务 八、 项目保障措施软件开发管理全套资料包清单: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书&am…...
BeanFactory vs. ApplicationContext
在Spring框架中,BeanFactory和ApplicationContext都是用于管理Spring容器中的bean的接口,但它们在功能和应用场景上有所不同。下面是它们的主要区别: 1. 基础功能 vs. 扩展功能 BeanFactory: 是Spring框架的最基础的IoC容器,提供…...
JDBC客户端连接Starrocks 2.5
<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://ma…...
004——双向链表和循环链表
目录 双向链表 双向链表的初始化(与单链表类似) 增: Ⅰ)头插法 Ⅱ)尾插法 Ⅲ)中间插入 删 改 查 整体代码示例: 循环链表 循环单链表 编辑 循环双链表 双向链表 不同于单链表&…...
framebuffer帧缓存
framebuffer:帧缓冲,帧缓存 Linux内核为显示提供的一套应用程序接口。(驱动内核支持) framebuffer本质上是一块显示缓存,往显示缓存中写入特定格式的数据就意味着向屏幕输出内容。framebuffer驱动程序控制LCD显示设备࿰…...
24_竞赛中的高效并查集
菜鸟:老鸟,我最近在做一个与社交网络相关的项目,需要频繁地检查两个用户是否属于同一个群组。但我发现每次检查都很耗时,性能很差。你有什么建议吗? 老鸟:你可以试试使用并查集(Union-Find&…...
新手c语言讲解及题目分享(十七)--运算符与表达式专项练习
本文主要讲解c语言的基础部分,运算符与表达式的学习,在这一部分中,往往有许多细节的东西需要去记住。当各种运算符一起用时,就会存在优先级的关系,本文末尾有各种运算符的优先级顺序表。 参考书目和推荐学习书目&#…...
香帅的金融学讲义:深入剖析与解读
香帅的金融学讲义:深入剖析与解读 金融学,这个看似高深复杂的学科,实则与我们的生活息息相关。从个人理财到国家宏观经济政策,金融学无处不在。那么,如何更好地理解金融学呢?今天,我们就来借助…...
java基础-IO(6)转换流InputStreamReader、OutputStreamWriter
引入: 从第一节可知,流分为两类:字节流和字符流,转换流就是在两者之间进行转换。 字节流转换为字符流; 字符流转换为字节流。 字符集 字符集:定义了可用字符及其对应的数字编码的集合。常见的字符集有UT…...
使用Azure Devops Pipeline将Docker应用部署到你的Raspberry Pi上
文章目录 1. 添加树莓派到 Agent Pool1.1 添加pool1.2 添加agent 2. 将树莓派添加到 Deployment Pool2.1 添加pool2.2 添加target 3. 添加编译流水线3.1 添加编译命令3.2 配置触发器 4. 添加发布流水线4.1 添加命令行4.2 配置artifact和触发器 5. 完成 1. 添加树莓派到 Agent P…...
91、K8s之ingress上集
一、Ingress service模式: loadbalance NodePort:每个节点都会有一个指定的端口 30000-32767 内网 clusterip:默认模式,只能pod内部访问 externalName:需要dns提供域名 1.1、对外提供服务的ingress service&…...
NISP 一级 | 2.1 密码学
关注这个证书的其他相关笔记:NISP 一级 —— 考证笔记合集-CSDN博客 通过上一章的学习,我们知道了,网络安全的 CIA 模型,而本期学习的“密码学”,则能为 CIA 模型提供很好的技术支持: 面临的攻击威胁所破坏…...
深度学习速通系列:混淆矩阵是什么
混淆矩阵(Confusion Matrix)是一种评估分类模型性能的工具,尤其在监督学习中用于分析分类结果。它通过一个矩阵的形式,将模型的预测结果与实际标签进行比较,从而可以清晰地看到模型在各个类别上的表现。以下是混淆矩阵…...
综合评价 | 基于熵权-变异系数-博弈组合法的综合评价模型(Matlab)
目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 根据信息熵的定义,对于某项指标,可以用熵值来判断某个指标的离散程度,其信息熵值越小,指标的离散程度越大, 该指标对综合评价的影响(即权重&…...
模板与泛型编程笔记(一)
1. 推荐书籍 《C新经典 模板与泛型编程》难得的很容易看得懂的好书,作者讲技术不跳跃,娓娓道来,只要花点时间就能看懂。 2. 笔记 模板为什么要用尖括号?因为便于编译器解析,可以将模板和普通函数声明分开。其实尖括…...
ubuntu 和windows用samba服务器实现数据传输
1,linux安装samba服务器 sudo apt-get install samba samba-common 2,linux 配置权限,修改目录权限,linux下共享的文件权限设置。 sudo chmod 777 /home/lark -R 3. 添加samba用户 sudo smbpasswd -a lark 4,配置共享…...
NISP 一级 | 3.2 网络安全威胁
关注这个证书的其他相关笔记:NISP 一级 —— 考证笔记合集-CSDN博客 网络安全威胁主要来自攻击者对网络及信息系统的攻击,攻击者可以通过网络嗅探、网络钓鱼、拒绝服务、远程控制、社会工程学等网络攻击手段,获得目标计算机的控制权ÿ…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
macOS 终端智能代理检测
🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub 在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如: fatal: unable to access https://github.com/ohmyzsh/oh…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...
