zoukankan      html  css  js  c++  java
  • 栈(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
  • 相关阅读:
    Shape详解
    C#装箱与拆箱
    C#值类型、引用类型的区别
    C#类型简述
    C# 关键字列表
    python图片转字符画
    软件测试面试题
    python关键字以及含义,用法
    JMeter的那些问题
    APP测试功能点
  • 原文地址:https://www.cnblogs.com/zhaoyingjie/p/13997316.html
Copyright © 2011-2022 走看看