美文网首页
letcode[020] 有效的括号

letcode[020] 有效的括号

作者: 一起学分析 | 来源:发表于2018-12-26 08:37 被阅读6次
题目020

题目地址:有效的括号

思路1:自拟思路——替换法

首先替换掉字符串中所有空格,字符串长度不是2的整数倍则返回False。然后依次对字符串进行成对替换,直到字符串变为空,则返回True,如果字符串不为空且替换前后长度相等,则说明存在非配对括号,返回False
总结: 主要在于找准规律。
用时: 68 ms

s="(()[]{})"
s="([)]"
s="{([][](({}[([)])))}"
s="{([][](({ }[()])))}"
s=" "
def isValid1(s):
    s=s.replace(" ","")
    if len(s)%2!=0:
        return False
    while 1:
        before_length=len(s)
        s=s.replace("()","").replace("[]","").replace("{}","")
        after_length=len(s)
        if s=="":
            return True
        elif before_length==after_length:
            return False

思路2:网友思路——出入栈,根据顺序添加括号,有成对的则去除,直到列表为空

出入栈的思路,就是从左到右,将左括号放进一个列表(入栈),接下来找下一个括号,如果是左括号,则继续添加;如果是右括号则看它是否和前一个括号是配对的,配对则从列表中删除(出栈);直到列表为空。
总结: 这个思路真线性。
用时: 48 ms

s="(){[]}"
def isValid2(s):
    if(len(s) % 2 == 1):
        return False
    x = ['[','(','{']
    y = ["]",")","}"]
    z = ["()","[]","{}"]
     
    res = []
    for i in s:
        print("i:"+i)
        if i in x:
            res.append(i) # 入栈
            print("res:")
            print(res)
        elif i in y:
            # 如果收到一个右括号,但是res中无左括号,直接返回False
            if res == []:
                return False
            else:
                temp = res.pop(-1) + i
                print("temp:"+temp)
                # 其余情况,出栈一个左括号,判断左括号+右括号是否有效
                if temp not in z:
                    return False
    return res == []

思路3:网友思路——用字典来进行出入栈(最快的)

还是进出栈的思路,换了哈希表(字典)的方式来执行。
总结: 这个return not stack写得可以说是传神了
用时: 36 ms

def isValid3(s):
    mapper = {')':'(', ']':'[', '}':'{'}
    stack = []
    for char in s:
        if char in mapper.values():
            stack.append(char)
        elif stack == [] or stack.pop() != mapper[char]:
            return False
    return not stack

相关文章

  • letcode[020] 有效的括号

    题目地址:有效的括号 思路1:自拟思路——替换法 首先替换掉字符串中所有空格,字符串长度不是2的整数倍则返回Fal...

  • LeetCode020:有效的括号

    题目介绍 题目:有效的括号描述:给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符...

  • leetcode020-有效的括号

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

  • 括号相关的算法题

    判断合法括号串 letcode 20描述:给定一个只包括 '(',')','{','}','[',']' 的字符串...

  • 回溯算法和深度优先搜索(二)

    先看一道题目: 括号生成。 输入一个整数 ,罗列出所有有效的括号组合。有效的括号组合是指 左括号开始,右括号结束,...

  • 括号生成 (有效括号)

    题目 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例: 输入...

  • 有效括号

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

  • 有效括号

    import java.util.*; /** 给定一个只包括 '(',')','{','}','[',']' 的...

  • 有效括号

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

  • 有效的括号

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

网友评论

      本文标题:letcode[020] 有效的括号

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