LeetCode(1)-栈:符号匹配类问题

leetcode c++栈 栈(堆栈) 栈类似一个瓶子,只能从一个口进出,属于一种线性表数据结构。堆栈存在两种操作:插入与删除。 瓶口就是栈顶,瓶底就是栈底,当栈里面没有元素时就是空栈。服从先进后出原则,越靠近瓶口的就越早出来。存储方式:顺序存储(类似数组,数组与容器,)与链式存储(类似单链表). 堆栈还可以分成: 静态栈:栈的大小固定,类似数组 动态栈:栈的大小会发生改变,类似链表 提示 当使用栈的时候,使用top前必须要判断一下栈是否为空,否则 参考 ... 阅读详情

 


文章目录

 

本文是LeetCode刷题总结第一篇之栈的典型应用:符号匹配。栈最典型的特征就是它的后进先出的特性,这个特性在许多方面被广泛应用,只要是看到题目中关于“括号匹配”、“对称结构判断”等字眼,就应该首先想到栈这种数据结构。

一、LeetCode 20.有效的括号

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

这道题是非常经典的栈的应用,它的思路就是利用栈的特性:当遇到{、【、(时,将其压入栈顶;当遇到}、】、)时将栈顶弹出与其匹配,若匹配不上则说明其并不是一个有效的括号结构。

class Solution {
    public boolean isValid(String s) {
        //空字符串判断为true
        if (s.trim().equals("")) return true;
        //奇数个元素则为false
        if (s.length() % 2 == 1) return false;
        Stack<Character> stack = new Stack<>();
        for (char c : s.toCharArray()) {
            switch (c) {
                case '{':
                    stack.push('}');
                    break;

                case '(':
                    stack.push(')');
                    break;

                case '[':
                    stack.push(']');
                    break;
                    
                default:
                    //} ) ]
                    //如果在弹栈过程中发现栈空了,说明左符号是少于右符号的,返回false
                    //如果在弹栈过程中发现不匹配,返回false
                     if (stack.isEmpty() || c != stack.pop()) {
                        return false;
                    }
            }
        }
        //如果弹栈过程完成后仍然存在元素,则说明右符号是多于左符号的,返回false
        return stack.isEmpty();
    }
}

二、LeetCode 844. 比较含退格的字符串

给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。
示例 1:
输入:S = “ab#c”, T = “ad#c”
输出:true
解释:S 和 T 都会变成 “ac”。
示例 2:
输入:S = “ab##”, T = “c#d#”
输出:true
解释:S 和 T 都会变成 “”。
示例 3:
输入:S = “a##c”, T = “#a#c”
输出:true
解释:S 和 T 都会变成 “c”。
示例 4:
输入:S = “a#c”, T = “b”
输出:false
解释:S 会变成 “c”,但 T 仍然是 “b”。
提示:
1 <= S.length <= 200
1 <= T.length <= 200
S 和 T 只含有小写字母以及字符 ‘#’。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/backspace-string-compare
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

这道题用栈实现的话是很容易的,只需要让字母入栈,当遇到#时弹栈(栈非空的话),最后再逐一弹栈比较两个栈中的元素是否相等即可:

class Solution {
     public boolean backspaceCompare(String S, String T) {
            Stack<Character> stack1 = new Stack<>();
       	    Stack<Character> stack2 = new Stack<>();
        //S入栈
       for (int i = 0; i < S.length(); i++) {
            char c = S.charAt(i);
            if (c == '#' && !stack1.isEmpty()) {
                //弹栈
                stack1.pop();
            } else if (c != '#') {
                stack1.push(c);
            }
        }
        //T入栈
        for (int i = 0; i < T.length(); i++) {
            char c = T.charAt(i);
            if (c == '#' && !stack2.isEmpty()) {
                //弹栈
                stack2.pop();
            } else if (c != '#') {
                stack2.push(c);
            }
        }
        //比较
        if (stack1.size() != stack2.size()) return false;
        while (!stack1.isEmpty()) {
            if (stack1.pop() != stack2.pop()) return false;
        }
        return true;
    }


}

三、LeetCode 682. 棒球比赛

你现在是棒球比赛记录员。
给定一个字符串列表,每个字符串可以是以下四种类型之一:
1.整数(一轮的得分):直接表示您在本轮中获得的积分数。
2. “+”(一轮的得分):表示本轮获得的得分是前两轮有效 回合得分的总和。
3. “D”(一轮的得分):表示本轮获得的得分是前一轮有效 回合得分的两倍。
4. “C”(一个操作,这不是一个回合的分数):表示您获得的最后一个有效 回合的分数是无效的,应该被移除。

每一轮的操作都是永久性的,可能会对前一轮和后一轮产生影响。
你需要返回你在所有回合中得分的总和。

示例 1:

输入: [“5”,“2”,“C”,“D”,"+"]
输出: 30
解释:
第1轮:你可以得到5分。总和是:5。
第2轮:你可以得到2分。总和是:7。
操作1:第2轮的数据无效。总和是:5。
第3轮:你可以得到10分(第2轮的数据已被删除)。总数是:15。
第4轮:你可以得到5 + 10 = 15分。总数是:30。
示例 2:

输入: [“5”,"-2",“4”,“C”,“D”,“9”,"+","+"]
输出: 27
解释:
第1轮:你可以得到5分。总和是:5。
第2轮:你可以得到-2分。总数是:3。
第3轮:你可以得到4分。总和是:7。
操作1:第3轮的数据无效。总数是:3。
第4轮:你可以得到-4分(第三轮的数据已被删除)。总和是:-1。
第5轮:你可以得到9分。总数是:8。
第6轮:你可以得到-4 + 9 = 5分。总数是13。
第7轮:你可以得到9 + 5 = 14分。总数是27。
注意:

输入列表的大小将介于1和1000之间。
列表中的每个整数都将介于-30000和30000之间。

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

这道题只需要按题目要求操作即可,需要注意的点是栈中需要留下所有有效的分数,之后再求和栈的元素就可以了:

class Solution {
  public int calPoints(String[] ops) {
        Stack<Integer> stack = new Stack<>();
        int totalCount = 0;
        for (int i = 0; i < ops.length; i++) {
            String v = ops[i];
            switch (v) {
                case "C":
                    //上一轮有效分数失效,出栈
                    stack.pop();
                    break;

                case "D":
                    //本轮获取的分数是上一轮有效分数的两倍
                    int curPoint1 = 2 * stack.peek();
                    stack.push(curPoint1);
                    break;

                case "+":
                    //本轮获取分数是上两轮分数之和
                    //上一轮分数
                    int prePoint = stack.pop();
                    //上第二轮分数
                    int pprePoint = stack.peek();
                    //本轮分数
                    int curPoint2 = prePoint + pprePoint;
                    //先放回上一轮分数
                    stack.push(prePoint);
                    //放入本轮分数
                    stack.push(curPoint2);
                    break;

                default:
                    //是直接分数
                    int point = Integer.parseInt(v);
                    stack.push(point);
                    break;

            }
        }

        while (!stack.isEmpty()) {
            totalCount += stack.pop();
        }
        return totalCount;
    }
}

四、LeetCode 921. 使括号有效的最少添加

给定一个由 ‘(’ 和 ‘)’ 括号组成的字符串 S,我们需要添加最少的括号( ‘(’ 或是 ‘)’,可以在任何位置),以使得到的括号字符串有效。

从形式上讲,只有满足下面几点之一,括号字符串才是有效的:

它是一个空字符串,或者
它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者
它可以被写作 (A),其中 A 是有效字符串。
给定一个括号字符串,返回为使结果字符串有效而必须添加的最少括号数。

示例 1:

输入:"())"
输出:1
示例 2:

输入:"((("
输出:3
示例 3:

输入:"()"
输出:0
示例 4:

输入:"()))(("
输出:4

提示:

S.length <= 1000
S 只包含 ‘(’ 和 ‘)’ 字符。

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

这道题的思路是当遇到(时,将其入栈,当遇到)时需要匹配栈头,若栈为空或者栈头是(则将栈头出栈,否则将)入栈,最后只需要计算栈中剩余元素的多少即可知道需要多少个括号来与之匹配了:

class Solution {
    public int minAddToMakeValid(String S) {
        Stack<Character> stack = new Stack<>();
        int n = S.length();
        for (int i = 0; i < n; i++) {
            char c = S.charAt(i);
            if (c == '(') {
                stack.push('(');
            } else {
                if(!stack.isEmpty()) {
                    char peek = stack.peek();
                    if (peek == '(') {
                        stack.pop();
                    } else {
                         stack.push(')');
                    }
                } else {
                    stack.push(')');
                }
              
            }
        }
        int res = 0;
        if (!stack.isEmpty()) {
            res = stack.size();
        }
        return res;
    }
}

五、LeetCode 1021. 删除最外层的括号

有效括号字符串为空 ("")、"(" + A + “)” 或 A + B,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,"","()","(())()" 和 “(()(()))” 都是有效的括号字符串。

如果有效字符串 S 非空,且不存在将其拆分为 S = A+B 的方法,我们称其为原语(primitive),其中 A 和 B 都是非空有效括号字符串。

给出一个非空有效字符串 S,考虑将其进行原语化分解,使得:S = P_1 + P_2 + … + P_k,其中 P_i 是有效括号字符串原语。

对 S 进行原语化分解,删除分解中每个原语字符串的最外层括号,返回 S 。

示例 1:

输入:"(()())(())"
输出:"()()()"
解释:
输入字符串为 “(()())(())”,原语化分解得到 “(()())” + “(())”,
删除每个部分中的最外层括号后得到 “()()” + “()” = “()()()”。
示例 2:

输入:"(()())(())(()(()))"
输出:"()()()()(())"
解释:
输入字符串为 “(()())(())(()(()))”,原语化分解得到 “(()())” + “(())” + “(()(()))”,
删除每隔部分中的最外层括号后得到 “()()” + “()” + “()(())” = “()()()()(())”。
示例 3:

输入:"()()"
输出:""
解释:
输入字符串为 “()()”,原语化分解得到 “()” + “()”,
删除每个部分中的最外层括号后得到 “” + “” = “”。

提示:

S.length <= 10000
S[i] 为 “(” 或 “)”
S 是一个有效括号字符串

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

这道题的思路是创建一个StringBuilder res用以存储结果,开始时需要设置一个是否为左外括号的标志flag = true,遍历字符串,当flag为true时,不将这个字符添加到res中,因为它是左外括号,然后将flag置为false,然后依次将之后的元素入栈和添加到res的末尾(注意,当碰到)时需要弹栈),当遇到某个)且栈为空时,说明这是无法被匹配的右外括号(因为一开始左外括号不添加到栈中),此时不将)添加到栈中和res中,随后将flag置为true,下一个字符即为下一轮的左外括号。

class Solution {
   public String removeOuterParentheses(String S) {
        //是否为左外括号
        boolean flag = true;
        int n = S.length();
        StringBuffer res = new StringBuffer();
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < n; i++) {
            char c = S.charAt(i);
            if (c == '(') {
                //判断是否为左外括号
                if (flag) {
                    //是左外括号,不将其添加到res中,将标志置为false
                    flag = false;
                } else {
                    //不是左外括号,将其添加到res和压入stack中
                    res.append(c);
                    stack.push(c);
                }
            } else if (c == ')') {
                //和栈顶匹配,当栈为空时,即无法匹配时说明这是右外括号,不添加到res中
                if (stack.isEmpty()) {
                    //出现了无法被匹配的右括号,此时将flag置为true。下一个迭代开始即为左外括号
                    flag = true;
                } else {
                    stack.pop();
                    res.append(c);
                }

            }

        }
        return res.toString();
        }
}

六、LeetCode 1047. 删除字符串中的所有相邻重复项

给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。

在 S 上反复执行重复项删除操作,直到无法继续删除。

在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

示例:

输入:“abbaca”
输出:“ca”
解释:
例如,在 “abbaca” 中,我们可以删除 “bb” 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 “aaca”,其中又只有 “aa” 可以执行重复项删除操作,所以最后的字符串为 “ca”。

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

这道题也是典型的栈应用题目,感觉做这题的时候有一种玩消消乐的感觉:

class Solution {
    public String removeDuplicates(String S) {
        StringBuffer res = new StringBuffer();
        Stack<Character> stack = new Stack<>();
        int n = S.length();
        for (int i = 0; i < n; i++) {
            char c = S.charAt(i);
            if (stack.isEmpty()) {
                stack.push(c);
            } else {
                Character peek = stack.peek();
                if (peek.equals(c)) {
                    stack.pop();
                } else {
                    stack.push(c);
                } 
            }
        }
            while (!stack.isEmpty()) {
                res.append(stack.pop());
            }
        return res.reverse().toString();
    }
}
python机器人编程——用python实现一个写字机器人 本篇我们构建一个可以跟人一样写字的机器人python软件。实现如下功能:打开一个写字板,人类在屏幕上写或画出任意形状,机器人同步在纸面上画出和人类一样的形状,就好像人类在远程操控机械臂,又或是机械臂是人的另一只手。这个软件是可以扩展的,如果连上互联网,可以实现人在北京写了一行字,在上海的机器臂同时也在自己的本子上写了一行字。 阅读详情

相关推荐

【商业化】【msix打包】Python 应用打包为 MSIX 的正确流程:入口点问题与解决方案

发现用msix打包工具打包python做的exe时总找不到程序入口点,后来理了一下才发现自己误会了,需要先生成一个基本的setup.exe,msix的打包是基于这个初始的安装程序进行的。只需要点击Buile-》Compile,然后Open Output Folder就可以得到exe安装程序了。可以使用免费工具inno setup来创建初始安装包。其中{group}这样的变量会自动匹配,不用自己指定。如果点击Run会运行安装程序。

每日出拳老爷子的博客 1105

Leetcode刷题笔记——栈篇

栈是一种先进后出的数据结构,栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表,这里我不做过多介绍,栈的应用和练习算是面试中的高频考点了,接下来看下我们来看一下Leetcode关于栈的常见面试题题型,每道题都附上了简单明了的python解法,大家重点关注算法思想即可。

qq_42898642的博客 1449

京东联盟h5st(3.1)加密参数逆向实战与反爬对抗策略

本文详细解析了京东联盟h5st(3.1)加密参数的逆向分析与实战破解过程。通过接口分析定位关键加密函数,拆解h5st结构并还原其基于SHA256和HMAC-SHA256的加密逻辑,最终使用Python集成JavaScript环境成功复现加密算法,并分享了应对反爬的频率限制、IP封禁及算法升级等对抗策略。

weixin_29246195的博客 1740

LeetCode刷题 --- 栈

图示,先push1,2,3,然后peek,栈1内元素转到栈2,后面只要栈2不为null,就可以执行pop和peek操作,如果为空,在吧元素从栈1转到栈2 就可以了。每次入栈的时候,判断当前元素和栈顶元素是否配对,如果配对,则弹出,如果不配对,则继续入栈。最后栈元素为空,则true,否则,为false。遇到左括号,则对应的右括号入栈,遇到右括号,则比较与栈顶元素是否一致,一致则出栈,继续,否则直接返回false。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(

qq_43325216的博客 693

MATLAB 2026最新版免费下载安装教程:许可证激活与报错排查

科学计算与仿真在工程实践中扮演着核心角色,MATLAB 作为业界标准平台,凭借矩阵运算、数据可视化和 Simulink 仿真能力,成为高校课程设计与科研实验中的高频工具。理解其许可证机制是正确安装与持续使用的关键:官方提供试用版、学生版、家庭版及校园许可证等多种合法获取途径,安装包由引导器、工具箱文件与授权信息组成。掌握从下载到激活的完整流程,并根据操作系统进行环境配置与工具组件选装,不仅能规避安全风险,还能显著提升工程效率。针对安装过程中常见的许可证校验失败或工具箱不可用等问题,提供系统化排查思路与命令行

weixin_30702441的博客 2730

中文核心:swin transformer 农作物病虫害识别 完整代码数据

中文核心:swin transformer 农作物病虫害识别

941

Rust 数据结构与算法:3栈:用栈实现符号匹配

Rust 数据结构与算法:3栈:用栈解决符号匹配问题

碳学长的博客 1039

【教程4>第8章>第44节】本章整体思维导图与学习总结

本教程系列提供FPGA/MATLAB/Simulink学习资源,包含《MATLAB入门100例》、《FPGA入门100例》、《Simulink入门60例》等基础教程,以及《FPGA/MATLAB/Simulink联合开发》进阶教程和《人工智能基础应用研究》专题,适合不同层次的学习者系统掌握相关技术。

FPGA/MATLAB学习教程/源码/项目合作开发 450

LeetCode栈和队列经典例题

这里有四道关于栈和队列的经典题型

m0_70811813的博客 1197

vue2学习笔记2-老规矩,从Hello World开始,了解Vue实例和模板

想要把“Hello,World”放置在页面上,首先需要准备一个HTML的块级元素div,来承接内容。

l_q_l的专栏 1259

基于YOLOv8的农作物病虫害检测系统设计与实现

国内如中国农业大学的科研团队采用改进的Faster R-CNN模型对小麦病害进行检测,取得了较好的效果。农作物病虫害是影响农业生产的重要因素之一,每年因病虫害导致的农作物减产高达20%-40%。YOLO(You Only Look Once)系列算法作为目标检测领域的代表性模型,以其高效、准确的特点在众多领域得到广泛应用。YOLOv8作为该系列的最新版本,在精度和速度上都有显著提升,非常适合农作物病虫害检测这类需要实时处理的应用场景。然而,现有研究仍存在一些不足:一是模型复杂度高,难以部署到移动设备;

YOLO 795

字符串匹配算法之Leetcode习题讲解

字符串匹配算法之Leetcode习题讲解。Leetcode 459: 重复的字字符串,采用KMP算法;Leetcode 1392: 最长快乐前缀,同样用KMP算法;Leetcode214 最短回文串,采用KMP算法的变体;Leetcode 5: 最长回文子串,采用马拉车算法;Leetcode 28: 找出字符串中第一个匹配的下标,采用Sunday算法;Leetcode 3: 无重复字符的最长子串,采用二分搜索;Leetcode 14:最长公共前缀,采用暴力匹配算法;Leetcode 12和面试题01.05:

qq_34603425的博客 1527

Linux | Ubuntu18.04安装WIFI6 AX201驱动完整教程

本节介绍了如何在Ubuntu18下安装AX201驱动的教程。

九七的博客 8883

精解括号匹配问题与极致栈设计:揭开最大栈和最小栈的奥秘

括号匹配问题,以及最大栈和最小栈问题总结

st200112266的博客 935

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【leetcode 力扣刷题】栈和队列的基础知识 + 栈的经典应用—匹配

栈和队列是比较特殊的线性结构,特殊在于栈和队列中的元素不能随意的访问——对于栈,只能访问栈顶元素(用top()方法),只能向栈顶添加元素(用push()方法),只能从栈顶取元素(用pop()方法)。对于队列,则有两个开口,可以看作有两个口的管道,从一个方向把球塞进去(push()),从另外一个方向取出来(pop()),那么取出来的顺序还是和塞进去的顺序一样的,即。比如下图,依次入队是(出队也是)1,2,3,4,先放入栈A,再将栈A的元素依次取出并放入栈B,此时栈B内元素的出栈顺序也是1,2,3,4了。

massive_jiang的博客 651

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LeetCode栈和队列

LeetCode栈和队列刷题记录

CinderGirl的博客 1068

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【经典题目】栈和队列面试题(括号匹配问题、用队列实现栈、设计循环队列、用栈实现队列)

本文主要介绍了栈和队列面试题(括号匹配问题、用队列实现栈、设计循环队列、用栈实现队列),内容全由作者原创(无AI),同时深度解析了每道题目的解题思路和解决方法,并带有配图帮助博友们更好的理解,点个关注不迷路,下面进入正文~~

2502_94055806的博客 1677

LeetCode--44.通配符匹配

前言:不知不觉又断更一天了,其实昨天就把这道题写得差不多了,只是刚好在力扣里面看见了一种新的解法,本来想写出来的,但是我把它推到今天了,因为太晚了,但是今天又睡懒觉了,所以我直接写出思路,就不写代码了,今天在写了这道题的题解之后,我觉得我之前写的力扣第十题的题解相比于这道题还是太过于稚嫩了,没有抓到主体上面,不够通俗易懂,都是它的缺点。所以,我们如果是个机器,要处理这样的问题,我们只会遍历完所有的情况,让所有的情况都用动态规划走一遍,那么只要有一条走得通,那么就说明可以匹配。

dying_man的博客 1695

数据结构与算法 - 栈的LIFO特性:括号匹配问题的直观解法

栈的LIFO特性:括号匹配问题的优雅解法 括号匹配是编程中的经典问题,要求判断字符串中的括号是否成对且顺序正确。其核心在于最近出现的未匹配左括号必须优先处理,这与栈的**后进先出(LIFO)**特性完美契合: 基本思路:遍历字符串,左括号入栈,右括号与栈顶元素匹配,成功则弹出,否则无效。 多类型扩展(如()[]{})通过建立右括号到左括号的映射关系实现。 Java实现:使用Deque模拟栈,时间复杂度O(n),空间复杂度O(n)。 边界处理:空字符串、单边括号、嵌套深度等。 栈解法直观高效,是数据结构与算法

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

栈的应用——括号匹配问题

欢迎指正。

2301_79893984的博客 695

【栈】括号匹配——python

括号匹配是栈的一个简单应用 从左到右扫描符号,遇见左括号就压入栈,遇见右括号若此右括号与栈顶的左括号匹配,则将左括号弹出该栈。若扫描到右括号,此时栈为空,则匹配失败 【程序流程图】 【LeetCode题目】 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: “()” 输出: true 示例 2: 输入: “()[]{

m0_47102213的博客 552

算法学习笔记——栈的经典问题

栈有很多典型的题目,这些题目整体难度不算很大,但是对于刚刚开始刷算法的同学来说,还是会感到比较吃力,这一章,我们就来盘点几个经典的高频栈算法问题。

xuanyue_18的博客 707

LeetCode 20.有效的符号算法解析及栈的相关知识

本文介绍了LeetCode第20题"有效的括号"的Java实现方法。通过分析题目要求,总结了三个关键规律:字符串长度必须为偶数、括号必须成对出现且顺序正确。采用栈数据结构(推荐使用Deque实现)和哈希表存储括号对应关系,实现了时间复杂度为O(n)的解决方案。代码包含正则表达式校验非法字符,并通过示例详细解析了算法流程。测试案例验证了算法的正确性,能够准确判断各种括号组合的有效性。该方法高效且可靠,适用于类似括号匹配问题的解决。

qq_38527427的博客 508

算法通关村——栈的经典算法问题解析

本文介绍了栈的两个经典算法问题——括号匹配问题和最大最小栈问题

moqi997752的博客 758

python数据结构——栈讲解

目录什么是栈栈的基本操作类型栈的基本应用匹配符号实现十进制在不同进制下的转换应用实战 什么是栈 栈有时也称作下堆栈,是一个有序集合,以列表的形式,但是他的添加和移除操作总是发生在同一端,被称为顶端,也叫做栈顶,另一端被称为低端,也叫栈底。可以理解为在桌子上叠放书本,我们放上去之后如果拿的话也是从上往下拿,放的话则是从下往上,我们往往取的都是放的时间最晚的,就是这个原理。 栈的基本操作类型 栈的操作类型有创建,添加,取出,删除等操作,但是本身并没有栈,我们只是构建的一种,所以我们需要自己写一个栈的代码 '''

qq_51718832的博客 1105

leetcode hot100 栈

连续的升温时res[idx] = 1, 降温时连续的数字入栈, 直到某一温度>栈顶索引的温度, 栈顶出栈, 栈顶索引res 相应计算, while循环保持判断该温度与栈顶温度直至结束。与栈相关, 所以一直在想存入取出的问题, 如果要存取, 那么本体一定是与数字大小相关, 故而判断入栈条件可以是temps[cur]>temp[pre]如果为 ’ ] ’ , 将括号中的字符串重复数字栈顶遍, 之后作为获取括号前的字符串即字符栈顶的字符串, 拼接成为新的字符串。单调增栈–栈存储索引, 保证栈内递增。

weixin_74191696的博客 1089
上一篇: Java基础(0)-BIO和NIO
下一篇: Vue.js基础知识总结
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值