zoukankan      html  css  js  c++  java
  • 20有效的括号

    # 这道题利用栈很容易就做出来的。
    # 栈先进后出,让左括号先进去,然后匹配右括号,如果完全匹配就返回真
    # 否则就返回假。
    # 我借用列表创建了一个栈,但同样可以用列表代替。
    # 创建一个栈。
    class Stack(object):
    def __init__(self):
    self.items = []

    def is_empty(self):
    # 判断是否为空
    return self.items == []
    def push(self,item):
    # 加入元素
    self.items.append(item)

    def pop(self):
    # 弹出元素
    return self.items.pop()

    def peek(self):
    # 返回栈顶元素
    return self.items[len(self.items) - 1]

    def size(self):
    # 返回栈的大小
    return len(self.items)
    class Solution:
    def isValid(self, s: str) -> bool:
    self.stack = Stack()
    return self.dfs(s) and self.stack.size() == 0
    # 如果s为空,就返回真,代表着匹配完了,而且过程中也没有报错
    def dfs(self,s):
    if s == "":return True
    # 判断是左括号还是右括号
    if s[0] in ")}]":
    # 如果是右括号则栈不能为空
    if self.stack.is_empty():
    return False
    # 然后判断此时栈顶元素是否和右括号匹配。
    # 注意,如果匹配成功一定要将左括号弹出。
    # 然后进行递归
    else:
    if s[0] == ")" and self.stack.peek() == "(":
    self.stack.pop()
    return self.dfs(s[1:])
    elif s[0] == "]" and self.stack.peek() == "[":
    self.stack.pop()
    return self.dfs(s[1:])
    elif s[0] == "}" and self.stack.peek() == "{":
    self.stack.pop()
    return self.dfs(s[1:])
    else:
    return False
    # 这里,如果是左括号,就将元素做压栈处理
    else:
    self.stack.push(s[0])
    return self.dfs(s[1:])




    A = Solution()
    print(A.isValid("()()()"))
    print(A.isValid("()()()"))
    print(A.isValid("()[]{}"))
    print(A.isValid("()(]]}"))
    print(A.isValid(""""""))
  • 相关阅读:
    js语法中一些容易被忽略,但会造成严重后果的细节
    第三方技术方案大集合,收集一些好用、有意思的方法、网站
    jQuery的Promise 这里介绍的很详细
    获取当月|目标月最后一天
    bootstrap ui样例
    正则校验数字格式,并只能保留两个小数
    新建指定长度的数组,填入内容,内容都为固定值
    mobx 学习笔记
    (二)Android 基本控件
    (一)初识Android
  • 原文地址:https://www.cnblogs.com/cong12586/p/13501521.html
Copyright © 2011-2022 走看看