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