20. 有效的括号(简单系列)

news/2024/11/29 22:54:51/

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

有效字符串需满足:

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

示例 1:

输入:s = “()”
输出:true
示例 2:

输入:s = “()[]{}”
输出:true
示例 3:

输入:s = “(]”
输出:false

提示:

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

第一种:

public boolean isValid(String s) {//创建了一个Stack<Character> 类型的栈对象Stack<Character> stack = new Stack<>();//字符串s转换成字符数组char[] chars = s.toCharArray();//遍历历字符数组中的每一个字符  for(char ch:chars){//判断当前字符是否为'(',如果是,则将对应的闭合括号')'入栈if(ch=='('){stack.push(')');//判断当前字符是否为'{',如果是,则将对应的闭合括号'}'入栈}else if(ch=='{'){stack.push('}');//判断当前字符是否为'[',如果是,则将对应的闭合括号']'入栈}else if(ch=='['){stack.push(']');//判断栈是否为空或者当前字符与栈顶元素不匹配,如果满足任一条件,则说明括号不匹配,直接返回false}else if(stack.isEmpty()||ch!=stack.pop()){return false;}}//遍历后,判断栈是否为空,如果为空,则说明所有括号都匹配,返回true,否则返回falsereturn stack.isEmpty();}

第二种:

 public boolean isValid(String s) {// 定义Map对象Map<Character, Character> map = new HashMap<>();map.put('(', ')');map.put('{', '}');map.put('[', ']');// 1. 声明一个栈出来,用来存储左扩号,左括号入栈,右括号出栈Stack<Character> stack = new Stack<>();// 2. 遍历字符串中的每一个字符for (int i = 0; i < s.length(); i++) {// 得到当前的字符Character c = s.charAt(i);// 如果当前的字符在map中,则进行入栈if (map.containsKey(c)) {// 入栈操作stack.push(c);}//如果当前栈不为空 且 字符不再map中,且该字符等于栈顶元素的map中的值(就是左右括号匹对),出栈else if (!stack.empty() && map.getOrDefault(stack.pop(), ' ').equals(c)) {// 已经进行出栈了continue;}else {// 什么都不满足 直接返回不匹配return false;}}//遍历后,判断栈是否为空,如果为空,则说明所有括号都匹配,返回true,否则返回falsereturn stack.isEmpty();}

http://www.ppmy.cn/news/1057254.html

相关文章

免费照片转绘画风格软件-FotoSketcher

FotoSketcher一款免费照片转绘画风格软件&#xff0c;只需点击几下鼠标即可自动将照片转换为艺术作品。支持从铅笔素描到水彩画或油画、钢笔画、墨水画、抽象艺术和卡通画&#xff0c;有 20 多种不同的风格可供选择&#xff0c;工具还可以修改原始照片增强对比度、锐化、简化图…

共享数据-vue3

vuex方案 安装vuex4.x 两个重要变动&#xff1a; 去掉了构造函数Vuex&#xff0c;而使用createStore创建仓库 为了配合composition api&#xff0c;新增useStore函数获得仓库对象&#xff1b;获取路由对象使用useRouter global state 由于vue3的响应式系统本身可以脱离…

(四)Doceke安装MySQL镜像+Docker启动MySQL容器

Doceke安装MySQL镜像/Docker启动MySQL容器 一、doceke安装MySQL镜像 切换到root用户&#xff0c;su root 。 1、启动Docker 启动&#xff1a;sudo systemctl start docker 停止&#xff1a;systemctl stop docker 重启&#xff1a;systemctl restart docker 查看docker运行…

get和post请求的区别以及post请求的url参数问题

1.主要区别 1.GET请求方法有以下几个特点&#xff1a; 默认的请求方法&#xff1b;GET请求通常用于获取信息&#xff0c;所以应该是安全的、幂等的&#xff1b;请求数据表现在URL上&#xff0c;以名称/值的形式发送。对请求的长度有限制&#xff1b;在IE和Opera等浏览器会产生…

ubuntu下mysql

安装&#xff1a; sudo apt update sudo apt install my_sql 安装客户端&#xff1a; sudo apt-get install mysql-client sudo apt-get install libmysqlclient-dev 启动服务 启动方式之一&#xff1a; sudo service mysql start 检查服务器状态方式之一&#xff1a;sudo …

如何做好项目进度管理?来看这几个要点!

8个项目管理工具模板、60个项目管理甘特图标模板、赠送30本项目管理电子书https://download.csdn.net/download/XMWS_IT/19886618?spm1001.2014.3001.5503 项目进度管理是指在项目实施过程中&#xff0c;对各阶段的进展程度和项目最终完成的期限所进行的管理。其目的是保证项目…

某多多商品平台数据采集

某多多商品平台数据采集 声明逆向目标寻找加密位置代码分析补环境补充内容声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者 无关,若有侵权,请私信我立即删除! 逆向目标 Anti-Content参数 寻找加密位置 先在控制台全局搜…

这五个数据分析师技巧你一定要知道!

在数据分析行业火热的今天&#xff0c;越来bai越多的人都掌握了数据分析的相关知识&#xff0c;而在数据分析工作中&#xff0c;我们需要掌握一些技巧才能够更好地提高数据分析工作效率进而少走弯路。那么大家是否知道数据分析师应该懂得的技巧是什么呢&#xff1f;下面我们就给…