首页 > 编程语言 >力扣20(java)-有效的括号(简单)

力扣20(java)-有效的括号(简单)

时间:2022-09-03 15:25:10浏览次数:59  
标签:map 20 java 示例 力扣 括号 字符串 false stack

题目:

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

有效字符串需满足:

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

示例 1:

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

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

输入:s = "(]"
输出:false
 

提示:

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

就利用栈的特点来解题

1.首先判断特殊情况,字符串的长度如果为奇数,那么一定不匹配,直接返回fasle;

2.创建一个栈和创建一个哈希表来存放每一种括号,键为右括号,值为左括号;

3.遍历字符串s:

  • 当遇到右括号(键),就去判断右括号在哈希表中所对应的值是否与栈顶的左括号是否一致,如果不一致或者栈中没有左括号,直接返回false,否则,相匹配后,就将已经匹配过的左括号移除。
  • 如果遇到左括号,直接压入栈顶。

4.遍历完后,判断栈是否为空,进行返回即可。

代码:

 1 class Solution {
 2     public boolean isValid(String s) {
 3         int n = s.length();
 4         if( n % 2 == 1) return false;
 5         Deque<Character> stack = new ArrayDeque<>();
 6         Map<Character,Character> map = new HashMap<Character,Character>(){{
 7             //将)]}作为key
 8             put(')','(');
 9             put(']','[');
10             put('}','{');
11         }};
12         for(int i = 0; i < n; i++){
13             char c = s.charAt(i);
14             //如果是c是)]}
15             if(map.containsKey(c)){
16                 //map.get(c)为([{
17                 if(stack.isEmpty() || stack.peekLast() != map.get(c)){
18                     return false;
19                 }
20                 //将栈顶移除,栈顶最接近c的左括号
21                 stack.pollLast();
22             }else{
23                 //如果是c是([{直接入栈
24                 stack.addLast(c);
25             }
26         }
27         return stack.isEmpty();
28     }
29 }

标签:map,20,java,示例,力扣,括号,字符串,false,stack
From: https://www.cnblogs.com/liu-myu/p/16652642.html

相关文章

  • 2022-2023-1 20221326 《计算机基础与程序设计》第一周学习总结
    作业信息班级:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01作业目标:快速浏览教材作业正文:博客......
  • java学习9.3-重写
    1.重写:子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作2.应用:重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名同参数的方法时,实际执行的是子类重写......
  • 用文本文档写第一个java程序并用命令行运行
    新建一个文本文档,后缀是java  编辑以下代码:classHellochina{publicstaticvoidmain(String[]args){System.out.println("hello");}......
  • [javascript] 构造函数与原型对象 +原型链
    构造函数与原型对象1、使用工厂方法创建对象functioncreatePerson(name,age,gender){//创建一个新的对象varobj=newObject();//向对象中添加属性......
  • 洛谷P7907 [Ynoi2005] rmscne
    数据结构好题首先将询问离线,扫描线扫答案区间的左端点。设和\(l\)颜色相同的下一个位置为\(x\)。那么对于左端点\(\leql\),\(l\leq\)右端点$<x$的询问,\(l\)......
  • Java 使用flink读写kafka中的数据(windows下)
    一、启动服务(网上查)1、启动zookeeper2、启动kafka3、启动flink二、写producerpublicvoidkafkaProducer(List<ResultBean>opcValue)throwsException{......
  • [javascript] 自调用函数
    自调用函数(IIFE)作用1.隐藏实现2.利用局部作用域,避免污染全局命名空间3.用它编写js模块(function(){vara=3;console.log(a+3);})();......
  • CVE-2022-22978 Spring-Security 漏洞复现
    1说明在SpringSecurity中使用RegexRequestMatcher且规则中包含带点号的正则表达式时,攻击者可以通过构造恶意数据包绕过身份认证2环境搭建环境搭建地址可以参考如下的......
  • java环境变量配置
    安装好java和jdk之后,对环境进行配置。  ================  上面的administrator是用户变量,下面为系统变量,上面或者下面都可以配置,这里选择配置系统变量。  先......
  • 并发的核心:CAS 是什么?Java8是如何优化 CAS 的?
    大家可能都听说说Java中的并发包,如果想要读懂Java中的并发包,其核心就是要先读懂CAS机制,因为CAS可以说是并发包的底层实现原理。今天就带大家读懂CAS是......