LeetCode Problem 20

class Solution:
    def isValid(self,s):
        stack=[]
        dict={']':'[','}':'{',')':'('}
    for i in s:
        if i in dict.values():
            stack.append(i)
        elif i in dict.keys():
            if stack==[] or stack.pop()!=dict[i]:
                return False
        else:
            return False
    
       return stack==[]
class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        s1=list(s)
        
        list1=['(','{','[']
        list2=[]
        dict1={')':'(','}':'{',']':'['}
        
        for i in s1:
            if i in list1:
                list2.append(i)
            else:
                if list2==[] or list2[len(list2)-1]!=dict1[i]:
                    return False
                else:
                    list2.pop()
        if list2!=[]:
            return False
        return True
    

图1 图2 分别为discussion里的高票和我origin的submission。比较而言,希望以后自己的改进之处:

  • 对于str,可以直接用for遍历字符,而无需转成list
  • 对于左括号,不必创建新的list,只需调用dict.values(),同样,右括号调用dict.keys()
  • 另外,对于这里的调用最后一个字符,可以无论如何直接.pop出来,但对于如果不出栈调最后一个元素,感觉自己的方法仍不是很理想。对于python的切片,仍然理解不到位
  • 在结尾的return,我自己的写的不够简洁

在刷题的过程中,让我知道了list是python中的天然栈。

p.s希望总结会有所收获,但题量还是要up up

 

posted @ 2017-09-11 10:30  kekukele  阅读(107)  评论(0编辑  收藏  举报