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(""""""))
  • 相关阅读:
    eclipse新建maven web项目
    mongodb启用Profiling定位问题
    Linux下系统监控工具nmon使用
    MMS(mongodb监控工具)
    Linux下定时切割Mongodb数据库日志并删除指定天数前的日志记录
    mongodb sharding集群搭建
    linux 下mongodb 3.2.5单机版安装
    linux mongodb replica set集群安装
    DOS命令查询当前文件夹中文件数量
    centos7 开放mongodb端口
  • 原文地址:https://www.cnblogs.com/cong12586/p/13501521.html
Copyright © 2011-2022 走看看