栈(Stack)的使用 LeetCode 第 20 题
特点:栈的最大特点就是后进先出(LIFO)。对于栈中的数据来说,所有操作都是在栈的顶部完成的,只可以查看栈顶部的元素,只能够向栈的顶部压⼊数据,也只能从栈的顶部弹出数据。
实现:利用一个单链表来实现栈的数据结构。而且,因为我们都只针对栈顶元素进行操作,所以借用单链表的头就能让所有栈的操作在 O(1) 的时间内完成。
LeetCode 第 20 题:给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 注意:空字符串可被认为是有效字符串。
示例 1
输入: "()"
输出: true
示例 2
输入: "(]"
输出: false
class Solution: def isValid(self, s: str) -> bool: len_s = len(s) if len_s % 2 != 0: return False if len_s == 0: return True # 利用进栈出栈的思想 str_dict = {'(': ')', '[': ']', '{': '}'} stacked = [] for i in range(len_s): # 如果符号为左括号进行压栈 if s[i] in str_dict.keys(): stacked.append(s[i]) # 如果栈不为空且符号在右括号内且左符号和最后一个元素相等 if stacked and s[i] in str_dict.values() and s[i] == str_dict[stacked[-1]]: stacked.pop() if stacked == []: return True else: return False solution = Solution() print(solution.isValid("{[]}")) # True print(solution.isValid("{[[}")) # False
示例:给定一个数组 T 代表了未来几天里每天的温度值,要求返回一个新的数组 D,D 中的每个元素表示需要经过多少天才能等来温度的升高。
给定 T:[23, 25, 21, 19, 22, 26, 23]
返回 D: [ 1, 4, 2, 1, 1, 0, 0]
class Solution(object): def dailyTemperatures(self, T): """ :type T: List[int] :rtype: List[int] """ stack = list() t_length = len(T) res_list = [0 for _ in range(t_length)] for key, value in enumerate(T): if stack: while stack and T[stack[-1]] < value: res_list[stack[-1]] = key - stack[-1] stack.pop() stack.append(key) return res_list
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
2017-11-17 HTML5自定义属性之data-index