领扣简单版--有效的括号(Valid Parentheses)

Posted explore-the-world

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了领扣简单版--有效的括号(Valid Parentheses)相关的知识,希望对你有一定的参考价值。

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true

示例 2:

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

示例 3:

输入: "(]"
输出: false

示例 4:

输入: "([)]"
输出: false

示例 5:

输入: "{[]}"
输出: true

Python3:

class Solution:
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        leng = len(s)
        print(leng)
        if not leng:
            return True
        elif leng % 2 == 0:
            count = {
                ‘{‘: [],
                ‘}‘: [],
                ‘[‘: [],
                ‘]‘: [],
                ‘(‘: [],
                ‘)‘: []
            }
            maping = {‘}‘: ‘{‘, ‘]‘: ‘[‘, ‘)‘: ‘(‘}
            circle = []
            for index, char in enumerate(s):
                count[char].append(index)
                if len(count[‘{‘]) < len(count[‘}‘]) or len(count[‘[‘]) < len(count[‘]‘]) or len(count[‘(‘]) < len(
                        count[‘)‘]):
                    return False
                if char in [‘]‘, ‘}‘, ‘)‘]:
                    left_index = count[maping[char]][-1]
                    circle.append([left_index, index])
                    count[maping[char]].pop(-1)
                    count[char].pop(0)
            lenth_circle = len(circle)
            for i in range(lenth_circle - 1):
                for j in range(i + 1, lenth_circle):
                    if (circle[i][0] < circle[j][0] < circle[i][1] < circle[j][1]) or (
                                circle[j][0] < circle[i][0] < circle[j][1] < circle[i][1]):
                        return False
            if len(count[‘{‘]) != len(count[‘}‘]) or len(count[‘[‘]) != len(count[‘]‘]) or len(count[‘(‘]) != len(
                    count[‘)‘]):
                return False
            
            return True
        else:
            return False

  当时想想好复杂啊,结果以提交报错执行时间太长,回头想想是我忽略了一些东西。由于限定条件内层一定是[ ]、{ }、 ( ),所以用栈原理就可以解决

Python3:

 

class Solution:
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        if not s:
            return True
        else:
            tmp_list = []
            mapping = {‘}‘: ‘{‘, ‘]‘: ‘[‘, ‘)‘: ‘(‘}
            left_list = mapping.values()
            for char in s:
                if char in left_list:
                    tmp_list.insert(0, char)
                else:
                    if not tmp_list or tmp_list[0] != mapping[char]:
                        return False
                    else:
                        tmp_list.pop(0)
            if tmp_list:
                return False
            return True

  基于python列表的实际实现可以稍微提升一下性能

Python3:

 

class Solution:
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        if not s:
            return True
        else:
            tmp_list = []
            mapping = {‘}‘: ‘{‘, ‘]‘: ‘[‘, ‘)‘: ‘(‘}
            left_list = mapping.values()
            for char in s:
                if char in left_list:
                    tmp_list.append(char)
                else:
                    if not tmp_list or tmp_list[-1] != mapping[char]:
                        return False
                    else:
                        tmp_list.pop(-1)
            if tmp_list:
                return False
            return True

  

 





以上是关于领扣简单版--有效的括号(Valid Parentheses)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode20_Valid Parentheses有效的括号

LeetCode 20. 有效的括号(Valid Parentheses)

20.有效括号(Valid Parentheses)

[LeetCode]20 Valid Parentheses 有效的括号

149.Valid Parentheses(有效的括号)

[Leetcode] valid parentheses 有效括号对