博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode#20 有效的括号
阅读量:6230 次
发布时间:2019-06-21

本文共 2305 字,大约阅读时间需要 7 分钟。

以下是我看了答案以后知道的两种比较优秀、便捷的解法,转在这里,说下自己对代码的理解。

~dei。(其实就是代码的搬运工!)

class Solution(object):    def isValid(self, s):        """        :type s: str        :rtype: bool        """        mp = { ')': '(', ']': '[', '}': '{' }            stk = []                                #构造了个存放了括号的输入顺序        for ch in s:            if ch in '([{':                 stk.append(ch)            else:                if not stk or mp[ch]!=stk.pop():       #1.如果没有‘([{’时出现了')]}'明显是不合适的  2.如果这个元素是')]}'但是与上个输入的括号不对应那么也是错的                    return False        return not stk    # stk为空的时候则所有括号都得到了对应匹配,(△.python中列表前如果有判断关键词出现(if,not...),那么列表为空则返回False,不为空则返回True)

class Solution(object):    def isValid(self, s):        """        :type s: str        :rtype: bool        """        l = []        for i in s:            if i in '([{':                l.append(i)            elif i in '}])':                if len(l) < 1:                    return False                tmp = l.pop()                if (tmp == '(' and i == ')') or (tmp == '[' and i == ']') or (tmp == '{' and i == '}'):                    pass                else:                    return False        if len(l) > 0:            return False        return True# 这份代码就不如上份的简洁,但是也非常好理解。上份代码更多的使用了python中的特性如'if not stk'和'return not stk',大致的意思是一样的

总结:

该题的难点在于‘如何正确的与之前输入的括号对应’,这就要求我们要把最后放进去'([{'的与将要再放进去的括号')]}'进行比较,同时还要记得之前放何种括号的顺序。这实际上是种后放先出(即先入后出)的想法,所以为了记录顺序选用了list,为了匹配最后'([{'
其中的一个,就要在放入后把它对应的(或是它本身)再取出与之前的比较是否符合。所以list.pop()正好能够实现 取出刚放入的'([{',事实上,这题如果想到了pop()方法,那么问题就会迎刃而解了。


我的一些小思路:

class Solution(object):    def isValid(self, s):        x = s[:int(len(s)/2)]        y = s[:int(len(s)/2)-1 :-1]        z = ''        target = {')':'(',']':'[','}':'{'}            for single in y:        z += target[single]        return x==z#然而这个只能解决是否对称。在此还有个判断是否对称的方法:给每个符号一个值,如:'{:-1,}:1...'所以和为0

小闲谈:

1.如果不算小学摸索的易语言的话,Python应该是我第一个学的语言吧。确实,刷算法题时就感觉python提供的函数方法特别多,特别方便。刷题的过程中,不仅积累的是刷题的经验,同时也在积累了解不同的Python提供的函数,实在没有的情况下才选择自己造轮子,我感觉这样做的效率应该才是最高的吧。只不过我也刚开始刷题不久,小菜鸟一只,可不敢胡说,不敢胡说。
2.python与其他语言相比,运行速度一直是被诟病的,而且在刷完一题,想出做法时的第一反应肯定是看看自己的代码的执行速度如何,leetcode也非常友好地给出了使用同类语言你的代码执行速度的排名,这点我感觉让人很舒服。但是在这我要指出的是,不一定执行速度最快的才是最好的,排名在后面的也有很多优秀、脑洞打开的Idea值得借鉴。排名靠前的当然也值得学习,他们的代码无论是在简洁度,还是方法的调用上都十分的干脆,并且会让你学到很多不知道的知识(这个原来还能这么用)或是你从未见过的方法。

转载于:https://www.cnblogs.com/nymrli/p/9141787.html

你可能感兴趣的文章
LaCie Mirror:科技与设计的交融
查看>>
很有意思,如何把代码看成一个犯罪现场
查看>>
10G光纤来了,收发器和线缆的变化有哪些?
查看>>
Java 9的JDK中值得期待的:不仅是模块化
查看>>
协鑫光伏:提升良品率的一小步是“中国智造”的一大步
查看>>
IoT大潮来袭 车联网行业准备好了吗?
查看>>
时空穿梭 探寻高端存储架构的前世今生
查看>>
中国企业应用数据分析大概情况和未来趋势
查看>>
阿里巴巴集团宣布60亿战略增资阿里云
查看>>
云计算Cloud Computing简介
查看>>
俄罗斯间谍黑客组织图拉劫持通信卫星链路盗取数据
查看>>
PM经验谈 项目管理工具必备的5个功能
查看>>
解读数据传输DTS技术架构及最佳实践
查看>>
谁来给电视盒子接班?
查看>>
CSS实现1px以内的移动
查看>>
2.4GHz、5GHz、60GHz,到底谁的无线信号又快又好?
查看>>
对实习生最慷慨的25家美国公司 猜每月多少薪水?
查看>>
《云计算揭秘企业实施云计算的核心问题》——第1章,第1.0节什么是云计算
查看>>
浅读亚太数据中心发展
查看>>
各地法院运用“大数据”“互联网+”提高司法效率
查看>>