LeetCode题库第二十题(简单系列)

题目及要求:

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

有效字符串需满足:

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

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

示例 1:

输入: "()"
输出: true

示例 2:

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

示例 3:

输入: "(]"
输出: false

示例 4:

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

示例 5:

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

思路:

扫描二维码关注公众号,回复: 2623116 查看本文章

1.看到题目的时候首先想到的是键值对,将左括号和右括号连接起来,然后去遍历。

2.其次是将左右括号进行计数。(ps,尝试以后发现行不通)

3.然后将对应的括号的索引值标记出来。(后来也行不通)

尝试1:

def isValid(s):
    list1=["(",")","{","}","[","]"]
    list2=[]
    if s[0]=="": return True
    if s.count(list1[0]) != s.count(list1[1]): return False
    if s.count(list1[2]) != s.count(list1[3]): return False
    if s.count(list1[4]) != s.count(list1[5]): return False
    for i in list1:
        if i in s:
            n=s.index(i)
            if i in s[n+1:]:
                n2=s[n+1:].index(i)
                ls=[i,n,n2]
            list2.append(ls)
    n=len(list2)
    for i in range(0,n-1,2):
        if (list2[i+1][1]-list2[i][1])%2==1:
            return True
        else:
            return False

以上代码最后是行不通的,之前也有含有字典的代码也是行不通的委屈委屈委屈

然后实在是没有思路的,网络上搜索了一下,看到了这篇文章【leetcode】Python实现-20.有效的括号,根据里面的方法自己再尝试了一遍,有了如下代码,此代码运行可通过:

class Solution:
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        list1 = [None]
        dict={'(':')','{':'}','[':']'}
        if len(s)%2==1:return False
        if s=="":return True
        for i in s:
            if i in dict:
                    list1.append(dict[i])#list1里面可能含有的值[')',']','}']
            else:
                    if i not in list1:#如果‘)',']','}'不在里面,说明前面没有对应的'(','{','['
                        return False
                    else:
                        list1.pop(-1)
        return len(list1)==1

最后把原文章大神的代码贴出来

a = {')': '(', ']': '[', '}': '{'}#固有思维是按照左括号对应右括号来写的,新思维可以反过来
l = [None]  # 设置None是为了排除空值的情况!
for i in s:#大神的for以下的部分需要费点时间去理解
    if i in a and a[i] == l[-1]:
        l.pop()
    else:
        l.append(i)
return len(l) == 1

总结:

1.键值对做字典,除了惯例的‘(‘:’)’外,还可以反过来。

2.需要懂得s.pop的用法,这个在判断数据重复,及其他数据的判断上面很有帮助。

3.理解在list中添加None值得意义,在之后的编程中也会很有用。

最后还是发个图,大笑大笑大笑


猜你喜欢

转载自blog.csdn.net/nodoself/article/details/80960252