leetcode20 Valid Parentheses 有效的括号

本文介绍了一种使用栈数据结构来验证括号匹配有效性的算法。该算法通过遍历输入字符串,利用栈来记录未闭合的括号,并检查括号是否正确闭合。文章提供了两种实现方式,一种是字符串替换法,另一种是高效的栈操作法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given a string containing just the characters '('')''{''}''[' and ']', determine if the input string is valid.

The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

给定字符串,包含(,),{,},[,],判断是不是有效的字符串。

括号必须以正确的顺序闭合,比如()、([])和()[]{}是有效的,但是(]和([)]是无效的。

解法:

class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        if not s:
            return False
        symbol = ('(', ')', '{', '}', '[', ']')
        s = list(s)
        a = [val for val in s if val in symbol]
        string = ''.join(a)
        dict_a = ['()','[]','{}']
        while len(string) > 0:
            if '()' not in string and '[]' not in string and '{}' not in string:
                return False
            for i in dict_a:
                string = string.replace(i,'')
        return True

print Solution().isValid("([])")

思路:首先把字符串中多余字符全部去掉,只保留括号。随后不断替换(),[],{},当字符串长度不为0但却不包含()、[]、{}时,返回False,否则返回True。

优质解法:

def isValid(s):
    stack = []
    dict = {"]": "[", "}": "{", ")": "("}
    for char in s:
        if char in dict.values():
            stack.append(char)
        elif char in dict.keys():
            if stack == [] or dict[char] != stack.pop():
                return False
        else:
            return False
    return stack == []

构建字典,利用栈的特性,如果一个字符等于字典的value,那么把它的另一部分存到栈里,并且下一次遇到的括号应该是就是它的另一部分,如果栈已经空了,还遇到括号的右边,或者遇到的括号不等于它的另一部分,返回false,如果最后这个栈还是空的,返回true。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值