系列索引:菜菜的刷题日记 | 被LeetCode用Python狂虐的那段日子
今天冒雨约会哈哈哈,真是绝绝子啊,最后电车都扔商场门口回来了,补道打卡题,我只能说这道简单题对我来说还不是可以一次AC的
【题目】
题目链接:https://leetcode-cn.com/problems/valid-parentheses/
【我的代码】
首先看结果,感觉自己为了把这道题A掉没考虑太多复杂度,结果时间还让我比较满意(个人目前正在学习,大佬勿嘲~)
那就简单说一下我的思路,主要是用了栈
的思想,这里我创建了一个列表和一个指针,按照我对栈先进先出的理解,当left(也就是左边的括号)入栈以后,再碰到右边的括号时就去对比,比如栈中是[’(’],当下一个是)时即i = ‘)’,那么看是否匹配,如果匹配就出栈,否则就是发生不匹配的情况直接false。这道题判断len(zhan)==0的是我后加的,在提交时我没考虑到直接上来就是右括号,导致报错,这里处理一下就行了。
class Solution:
def isValid(self, s: str) -> bool:
left = ['(', '{', '[']
right = [')', '}', ']']
zhan = []
pt = -1
for i in s:
if i in left:
zhan.append(i)
pt += 1
if i in right:
if len(zhan) == 0:
return False
if i == right[left.index(zhan[pt])]:
zhan.pop()
pt -= 1
else:
return False
return True if len(zhan) == 0 else False
【官方思路】
官方大大的题解是使用栈的思想,看了我的思路出发点是正确的,这里使用了哈希表
,而我只是使用了两个列表,可以看出我对数据结构掌握的不是很好,需要再复习!另外奇数直接false
我没想到,这一点对提升效率太关键了!
class Solution:
def isValid(self, s: str) -> bool:
if len(s) % 2 == 1:
return False
pairs = {
")": "(",
"]": "[",
"}": "{",
}
stack = list()
for ch in s:
if ch in pairs:
if not stack or stack[-1] != pairs[ch]:
return False
stack.pop()
else:
stack.append(ch)
return not stack
【参考代码】
class Solution:
def isValid(self, s: str) -> bool:
stk = []
for c in s:
# 如果c是 ({[ 则入栈
if c in ['(','[','{']:
stk.append(c)
# 如果c是 )}] 并且栈不为空 则 判断栈顶是否为与之对应的左括号 是则出栈,不是则返回fasle
elif c == ')' and stk and stk[-1] == '(':
stk.pop();
elif c == ']' and stk and stk[-1] == '[':
stk.pop();
elif c == '}' and stk and stk[-1] == '{':
stk.pop()
else:
# 如果c是 )}] 栈为空 那么返回false
# 如果c是 )}] 栈不为空, 但是 栈顶不是与c对应的左括号 那么返回false
return False
# 例如"(){}[" ,如果最后栈不为空,那么就是有多余的左括号了
return not stk
两个代码基本一致,供大家翻阅
class Solution:
def isValid(self, s: str) -> bool:
if len(s) % 2 == 1:
return False
stack = list()
for ch in s:
if ch == '(' or ch == '[' or ch == '{':
stack.append(ch)
elif ch == ')':
if len(stack) !=0 and stack[-1] == '(':
stack.pop()
else:
return False
elif ch == ']':
if len(stack) !=0 and stack[-1] == '[':
stack.pop()
else:
return False
elif ch == '}':
if len(stack) !=0 and stack[-1] == '{':
stack.pop()
else:
return False
if len(stack) == 0:
return True
else:
return False
【思考】
早睡早起是我遥不可及的梦
Python力扣题解系列持续更新,欢迎
点赞收藏
+关注
上一篇:菜菜的刷题日记 | 12.整数转罗马数字
下一篇:菜菜的刷题日记 | 蓝桥杯 — 十六进制转八进制(纯手撕版)附进制转换笔记
本人水平有限,文章中不足之处欢迎下方👇评论区批评指正~如果感觉对你有帮助,点个赞👍 支持一下吧 ~
不定期分享 有趣、有料、有营养内容,欢迎 订阅关注 🤝 我的博客 ,期待在这与你相遇 ~