20. Valid Parentheses

题目

Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
An input string is valid if:
Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
It is an empty string.
Example 1:
Input: “()”
Output: true
Example 2:
Input: “()[]{}”
Output: true
Example 3:
Input: “(]”
Output: false
Example 4:
Input: “([)]”
Output: false
Example 5:
Input: “{[]}”
Output: true
即检验输入字符串中的括号是不是有效的,要求小括号、中括号或大括号必须成对出现,而且顺序不能颠倒,括号内为空。

解法 1

思路

先定义一个字典包含三类成对出现的括号,之后需要用到堆栈。将输入字符串中出现的括号(小、中、大)并进行入栈操作(append)。当栈内无内容说明输入中没有括号没有成对出现,当栈顶弹出的括号不属于当前成对括号时说明括号顺序错误,这两种情况返回false。遍历输入后若栈无内容则返回true否则为false。

class Solution:
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        stack = []
        # 字典
        pairs = {'(':')', '[':']', '{':'}'}

        for char in s:
            if char in pairs:
                stack.append(pairs[char])
            else:
                if len(stack) == 0 or stack.pop() != char:
                    return False

        return len(stack) == 0

解法 2

思路

直接判断输入字符串中有没有成对出现的括号(小、中、大),有的话将成对括号替换掉,最后判断字符串s是不是空,空则说明输入为空或输入字符串包含成对括号,返回true;不是空则说明输入字符串包含无效的括号,返回false。
下面两段代码都是这个思路。

class Solution:
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        while "()" in s or "{}" in s or "[]" in s:
            s = s.replace("()", "").replace("[]", "").replace("{}", "")
        return len(s) == 0
class Solution:
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        temp = len(s)
        while(temp != 0 and temp%2 == 0):
            s = s.replace("()", "").replace("[]", "").replace("{}", "")
            if temp > len(s):
                temp = len(s)
            else:
                temp = 0
        return len(s) == 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值