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(""""""))
  • 相关阅读:
    KMP 算法 C++
    java RTTI笔记 之Class学习笔记(摘自java编程思想)
    java sql
    event
    mysql 编写存储过程
    《淘宝技术这十年》重读笔记
    关于“产品”的笔记
    程序员,当你遇到一个“坑”
    C盘清理大作战
    android开发笔记
  • 原文地址:https://www.cnblogs.com/cong12586/p/13501521.html
Copyright © 2011-2022 走看看