美文网首页
刷题笔记06-19 (1)

刷题笔记06-19 (1)

作者: 不务正业的码农 | 来源:发表于2018-06-20 11:27 被阅读0次

括号匹配(栈思想)

题目如下

Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

An input string is valid if:

Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.


第一种方法

时间复杂度O(n),空间复杂度O(n)
解题思路:
总体来说,开闭括号应该进行逆序匹配。最后被找到的开括号应该匹配最近的闭括号,最先被找到的开括号应当匹配最后找到的闭括号。这符合我们栈的先进后出的概念。
首先构造一个开闭括号之间的映射表和空栈,为了不从空列表中pop值,在栈中先添加一个空字符串。遍历整个字符串,如果发现开括号,则把闭括号推入栈中。如果是闭括号的,且此闭括号与栈顶的闭括号不匹配的话,则是无效的括号匹配。最后如果栈没空的话,则是无效匹配,如果栈空了的话,则匹配成功。

def parenthesis_match(text):
    matching_dict = {"(":")","{":"}","[":"]"}
    #use the "" in the stack so there is no pop from empty list
    matching_stack = [""]
    for i in text:
        if i in matching_dict:
            matching_stack.push(matching_dict[i])
        elif i in matching_dict.values() and i != matching_stack.pop():
            return False
    return matching_stack.items == [""]

第二种方法

解题思路:
和第一种方法大同小异,如果为开括号,则推入栈中。如果是闭括号,首先检查栈是否为空,如果为空,返回False。然后检查是否和栈顶的开括号相同,如果相同,则pop掉栈顶,如果不同,则返回False值。最后检查栈是否为空栈

def parenthesis_match_flag(text):
    matching_stack = []
    matching_dict = {")":"(","]":"[","}":"{"}
    flag = True
    index = 0
    for i in text:
        if i in matching_dict.values:
            matching_stack.append(i)
        elif i in matching_dict:
            # If there is no opening parenthesis,false
            if len(matching_stack) == 0:
                flag = False
                break
            elif matching_dict[i] == matching_stack[-1]:
                matching_stack.pop()
            else:
                flag = False
                break
        else:
            continue
    # if the stack is not empty, not match
    if matching_stack != []:
        flag = False
    return flag

相关文章

  • 刷题笔记06-19 (1)

    括号匹配(栈思想) 题目如下 Given a string containing just the charact...

  • 刷题笔记06-19 (2)

    经典的Two Sum问题 题目如下 Given an array of integers, return indi...

  • sql 刷题笔记1

    1. 查找重复的邮箱 这道题本质上是一道查找重复数据的题目,常用的思路就是 使用 group by 分组计数,然后...

  • 晨间日记

    计算机刷题 看书写笔记 高数刷题 英语刷题 奋斗到天亮,加油奥利给

  • 谷歌工程师为金三银四筹备1000道Leetcode刷题笔记

    对于刷题相关的文章,在之前我也推荐过不少,今天再给大家推荐一份算法刷题笔记,这份笔记与以往的刷题有所区别,作者把 ...

  • 刷题笔记

    算法思想 一、二分查找 1. 算法思想 算法详解 算法细节 一定要看二分查找细节.md 实现时需要注意以下细节: ...

  • 刷题笔记

    最近在准备面试,发现自己真的菜的不行,就计划接下来的时间把 leetcode 上面刷的 中等题 和 每日一题做个简...

  • 刷题笔记

    题目描述 343 - Integer BreakGiven a positive integer n, break...

  • 4.8日计划

    1.听课,做笔记。 2.做学习强国题,读笔记知识点。 3.刷20道题。 4.晚上睡觉前回顾,复盘今日所学。 坚持,...

  • 2020-01-16 - 草稿

    梁桉1月16日工作日报 一、工作内容 1. 刷题 2.记笔记 3.写逐字稿练课 二、工作心得 今天在刷题的过程中,...

网友评论

      本文标题:刷题笔记06-19 (1)

      本文链接:https://www.haomeiwen.com/subject/xbbtyftx.html