leetcode刷题-20.有效的括号(简单)

题目描述

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例1:

输入:s = "()"
输出:true

示例2:

输入:s = "()[]{}"
输出:true

示例3:

输入:s = "(]"
输出:false

代码

import Stack


def parChecker(symbolString):
    s = Stack.Stack()

    balance = True
    index = 0

    while index < len(symbolString) and balance:
        symbol = symbolString[index]
        # 如果是左括号就入栈
        if symbol in "([{":
            s.push(symbol)
        # 如果是右括号,首先判断栈是否为空,如空则报错,如不空则判断括号是否匹配
        else:
            if s.isEmpty():
                balance = False
            else:
                top = s.pop()
                if not matches(top, symbol):
                    balance = False
        index += 1

    if balance and s.isEmpty():
        return True
    else:
        return False


def matches(open, close):
    opens = "([{"
    closes = ")]}"
    return opens.index(open) == closes.index(close)

import Stack — 导入的是定义的。该数据结构的特点是先进后出。代码如下:

class Stack:
    '''
    将列表的尾部定义为栈的顶端
    '''
    def __init__(self):
        self.item = []
	
    # 判断是否为空栈
    def isEmpty(self):
        return self.item == []
	
    # 将元素item添加到栈的顶端
    def push(self, item):
        self.item.append(item)

    # 将栈顶端的元素移除,会返回顶端的元素
    def pop(self):
        return self.item.pop()

    # 返回栈顶端的元素,但并不移除该元素
    def peek(self):
        return self.item[len(self.item) - 1]

    # 返回栈中元素的个数
    def size(self):
        return len(self.item)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值