码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 力扣20-有效的括号——栈实现


    题目描述

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

    有效字符串需满足:

    1. 左括号必须用相同类型的右括号闭合。
    2. 左括号必须以正确的顺序闭合。

    解题思路

    写代码时一般也要遵从代码的语法规范,括号不符合规范也会报语法错误,一般会出现以下几种情况:

    • 左括号多了  ( ( )
    • 右括号多了 [ ] ]
    • 左右括号不匹配 ( [ ) ]

    而且发现如果有括号嵌套时,最内侧的括号是距离最近的(后进先出),最外侧的括号距离是最远的(先进后出),可以联想到这道题目可以用栈来求解。

    关于java中的栈Deque是一个双端队列的接口,它的实现类有LinkedList、ArrayDeque、LinkedBlockingDeque,其中比较常用的是LinkedList,这也就是AyyarList会报错的原因。

    这是一篇介绍Deque的博客【Java】Java双端队列Deque使用详解_devnn的博客-CSDN博客_deque javaDeque是一个双端队列接口,继承自Queue接口,它们共同的实现类是LinkedList。Deque的功能很强大:代替普通队列Queue:先进先出、队尾进队头出可以作为双端队列:队尾和队头都可以进出还可以作为堆栈使用:先进后出、只能从一端进出 注意:Java堆栈Stack类已经过时,Java官方推荐使用Deque替代Stack使用。jdk文档中关于Deque的使用介...https://blog.csdn.net/devnn/article/details/82716447

     当Deque作为堆栈时,一般使用push、pop、peek三种方法。

    • 新建一个栈arr  Deque arr = new LinkedList<>();
    • 遍历字符串s
    • 如果遇到左括号一律转变为相应的右括号,这样做的目的是为了将遍历到的右括号与栈内元素做匹配
    • 如果在遍历过程中发现栈已经为空,说明右括号数量多了,返回false
    • 如果遍历完了发现栈不为空,说明左括号数量多了,也会返回false
    • 如果遍历到的字符ch 与当前栈顶元素不匹配,也会返回false,否则就可以pop弹出栈顶元素。

    输入输出示例

    代码

    1. class Solution {
    2. public boolean isValid(String s) {
    3. int len = s.length();
    4. char ch;
    5. //Deque arr = new ArrayList<>();
    6. Deque arr = new LinkedList<>();
    7. for(int i = 0; i < len; i++){
    8. ch = s.charAt(i);
    9. if(ch =='('){
    10. arr.push(')');
    11. }else if(ch =='['){
    12. arr.push(']');
    13. }else if(ch == '{'){
    14. arr.push('}');
    15. }else if(arr.isEmpty()){ //在遍历过程中栈为空说明右括号个数多了
    16. return false;
    17. }else if(ch == arr.peek()){//栈顶元素与当前元素匹配才可以弹出,也就是说左右元素必须匹配
    18. arr.pop();
    19. }else return false;
    20. }
    21. return arr.isEmpty();//如果遍历完发现不为空则说明左括号个数多了
    22. }
    23. }

  • 相关阅读:
    Vue + Element 表格拖拽排序、树形表格拖拽排序
    【springMvc】自定义注解的使用方式
    【数据结构】谈谈ArrayList和LinkedList的区别
    Linux 常见问题
    08-循环神经网络实现文本情感分类
    Pytorch模型训练实用教程学习笔记:四、优化器与学习率调整
    scrapy框架的保存文件的几种方式
    使用minio进行文件存储
    《Kali渗透基础》15. WEB 渗透
    TensorRT+Yolov7-tiny:基于TensorRT+API部署YoloV7-tiny模型
  • 原文地址:https://blog.csdn.net/weixin_44564247/article/details/126027209
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号