算法刷题之六栈

1|0


1.有效括号
2.最长有效括号

2|0有效的括号


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

有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true

示例 2:
输入: "()[]{}"
输出: true

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

方法:判断括号是否有效,遇到左边括号时压栈,遇到右边括号时出栈,比较两个是否能匹配。这个栈这个数据结构用的很巧妙。

class Solution: def isValid(self, s: str) -> bool: if len(s) % 2 == 1: return False parais = { ")":"(", "]":"[", "}":"{" } stack = [] for i in s: if i in parais: if not stack or stack[-1] != parais[i]: return False else: stack.pop() else: stack.append(i) return not stack

3|0最长有效括号


题目:
给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
 
示例 1:

输入:s = "(()"
输出:2
解释:最长有效括号子串是 "()"
示例 2:

输入:s = ")()())"
输出:4
解释:最长有效括号子串是 "()()"
示例 3:

输入:s = ""
输出:0

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-valid-parentheses

方法:判断括号的匹配,遇到左括号入栈,遇到右括号出栈,最后找到栈中剩下的元素的下标,两者之差就是最长有效。

class Solution: def longestValidParentheses(self, s: str) -> int: n = len(s) stack = [-1] length = 0 for i in range(n): if s[i] == '(': stack.append(i) else: stack.pop() if not stack: stack.append(i) else: length = max(length, i-stack[-1]) return length

4|0栈小结


关于栈这中数据结构,直接用这个结构特性的题目不多,配合其他数据结构的比较多。比如在DFS中就使用了循环和栈的配合,BFS中使用了队列和栈的配合。
遇到括号匹配等关键字,考虑栈这种数据结构。


__EOF__

本文作者goldsunshine
本文链接https://www.cnblogs.com/goldsunshine/p/14930643.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   金色旭光  阅读(110)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示