zoukankan      html  css  js  c++  java
  • 算法刷题之六栈

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

    有效的括号

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

    有效字符串需满足:
    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。
    注意空字符串可被认为是有效字符串。
    示例 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
    

    最长有效括号

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

    栈小结

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

  • 相关阅读:
    Spring MVC- 表单提交
    Ajax提交与传统表单提交的区别说明
    CSS各种居中方法
    Android RecyclerView 使用完全解析 体验艺术般的控件
    如何解决VMware上MAC虚拟机不能上网问题
    input标签的hidden属性的应用及作用
    SpringMVC表单标签简介
    EL显示List里嵌套map(Spring MVC3)返回的model
    Spring3 MVC请求参数获取的几种方法
    写数据到文件,并同步到磁盘
  • 原文地址:https://www.cnblogs.com/goldsunshine/p/14930643.html
Copyright © 2011-2022 走看看