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