LeetCode#20 有效的括号
程序员文章站
2022-04-10 11:53:37
以下是我看了答案以后知道的两种比较优秀、便捷的解法,转在这里,说下自己对代码的理解。 ~dei。(其实就是代码的搬运工!) 总结: 该题的难点在于‘如何正确的与之前输入的括号对应’,这就要求我们要把最后放进去'([{'的与将要再放进去的括号')]}'进行比较,同时还要记得之前放何种括号的顺序。这实际 ......
以下是我看了答案以后知道的两种比较优秀、便捷的解法,转在这里,说下自己对代码的理解。
~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