(day10)NC52 有效括号序列

描述

给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。

数据范围:字符串长度 0≤𝑛≤10000

要求:空间复杂度 𝑂(𝑛),时间复杂度 𝑂(𝑛)

示例1

输入:"["

返回值:false

示例2

输入:"[]"

返回值:true

 栈+字典

class Solution:
    # 定义一个方法,用于判断括号字符串是否有效
    def isValid(self, s: str) -> bool:
        # 初始化一个空栈,用于存储左括号
        stack = []
        
        # 定义一个字典,存储右括号与左括号的映射关系
        mapping = {")": "(", "}": "{", "]": "["}
        
        # 遍历字符串s中的每个字符
        for char in s:
            # 如果字符是左括号,压入栈中
            if char in "([{":
                stack.append(char)
            # 如果字符是右括号
            else:
                # 如果栈为空,说明右括号没有匹配的左括号,返回False
                if not stack:
                    return False
                # 如果栈顶元素与当前右括号匹配,弹出栈顶元素
                if stack[-1] == mapping[char]:
                    stack.pop()
                # 如果不匹配,返回False
                else:
                    return False
        
        # 如果栈为空,说明所有括号都匹配,返回True,否则返回False
        return not stack

1.栈的特点:后入先出,实际上就是对顺序表和链表的进一步封装。栈可以用顺序表表示,也可以用链表表示。

2.用顺序表构造栈:方法一:在线性表头部添加元素,并在头部取出元素,因为所有元素都要移动位置,相应的时间复杂度为O(n);方法二:在线性表尾部添加元素,并在尾部取出元素,相应的时间复杂度为O(1)。因此,选用方法二。

用链表构造栈:方法一:在链表头部添加元素,并在头部取出元素,相应的时间复杂度为O(1);方法二:在链表尾部添加元素,并在尾部取出元素,因为要遍历整个链表,相应的时间复杂度为O(n)。因此,选用方法一。

3.关于栈的操作:添加元素、弹出栈顶元素、返回栈顶元素、判断是否为空、计算元素个数。

class Stack(object):
 
    def __init__(self):
        #设置一个列表
        self.__items = []
 
    def push(self,item):
        #添加元素
        self.__items.append(item)
 
    def pop(item):
        #弹出栈顶元素
        return self.__items.pop()
 
    def peek(self):
        #返回栈顶元素
        return self.__items[-1]
 
    def is_empty(self):
        #判断是否为空
        return self.items == []
 
    def length(self):
        #计算栈中元素个数
        return len(self.items)

 使用替换对比法

class Solution:
    # 定义一个方法,用于判断括号字符串是否有效
    def isValid(self, s: str) -> bool:
        # 无限循环,直到字符串为空或没有更多可替换的括号对
        while True:
            # 保存当前字符串的原始状态
            ori = s
            # 依次替换所有的 "()", "{}" 和 "[]"
            s = s.replace("()", "").replace("{}", "").replace("[]", "")
            # 如果字符串为空,说明所有括号都匹配,返回True
            if not s:
                return True
            # 如果字符串没有变化,说明没有更多的括号对可替换,返回False
            if s == ori:
                return False

repalce函数

语法

replace() 函数是 Python 字符串对象的内置方法之一,用于将字符串中的指定子串替换为新的子串。

str.replace(old, new[, count])

参数

    old:需要被替换的旧子串。
    new:替换后的新子串。
    count(可选):指定替换的次数。如果不指定,则会替换所有匹配的子串。

返回值 

replace() 函数返回一个新的字符串,其中的旧子串已被替换为新子串。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值