leetcode刷题之 20. 有效的括号

leetcode刷题之 20. 有效的括号

  • 题目
    给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:
    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。
    注意空字符串可被认为是有效字符串。

  • 示例 :
    示例 1:
    输入: “()”
    输出: true
    示例 2:
    输入: “()[]{}”
    输出: true
    示例 3:
    输入: “(]”
    输出: false
    示例 4:
    输入: “([)]”
    输出: false
    示例 5:
    输入: “{[]}”
    输出: true

  • 代码1:

class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        for i in range(len(s)):
            s=s.replace("()",'')
            s=s.replace("[]",'')
            s=s.replace("{}",'')
        return s == ""
# 执行用时 : 84 ms, 在Valid Parentheses的Python提交中击败了2.41% 的用户
# 内存消耗 : 11.8 MB, 在Valid Parentheses的Python提交中击败了2.24% 的用户
  • 算法说明:
    直接判断括号的匹配,然后删除,即判断是否存在“()”、“[ ]”、“{}”,如果存在直接删除,判断最后是否为空!
  • 代码2:
class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """     
        s = list(s)
        a = [0]
        if s == []:
            return True
        if s[0] == ']' or s[0] == ')' or s[0] == '}':
            return False
        for i in range(len(s)):
            if s[i] == '(' or s[i] == '[' or s[i] == '{':
                a.append(s[i])
                continue
            if s[i] == ')' and a[-1] == '(':
                a.pop()
                continue
            if s[i] == ')' and a[-1] != '(':
                return False
            if s[i] == ']' and a[-1] == '[':
                a.pop()
                continue
            if s[i] == ']' and a[-1] != '[':
                return False
            if s[i] == '}' and a[-1] == '{':
                a.pop()
                continue
            if s[i] == '}' and a[-1] != '{':
                return False
        return  len(a) == 1
# 执行用时 : 36 ms, 在Valid Parentheses的Python提交中击败了16.72% 的用户
# 内存消耗 : 11.8 MB, 在Valid Parentheses的Python提交中击败了2.24% 的用户
  • 算法说明:
    利用栈的思想判断,( )、{ }、[ ]。左括号入栈,右括号出栈!最后判断栈是否为空!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

O_胡萝卜_O

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值