leetcode 热题100刷题-有效的括号
题
题号:20
题目:有效的括号
难度:简单
链接:https://leetcode.cn/problems/valid-parentheses/
2022/08/19答案
算法思路
利用栈的思想。凡是左括号,就存放到列表中;凡是右括号,就利用字典找出它对应的左括号,判断是否与添加进列表里的最后一个左括号相同。
因为括号不能交叠,如果相同则弹出这个元素。遍历完所有元素后,如果列表为空,则说明所有括号两两相对应,如果不为空,则说明是不合格,返回FALSE。
思路其实挺明确,就不写注释了。
代码
class Solution:
def isValid(self, s: str) -> bool:
"""
利用列表
但只在一侧添加和删减
相当于栈
"""
check = []
dict_left = {"(": ")", "[": "]", "{": "}"}
dict_right = {")": "(", "]": "[", "}": "{"}
for ele in s:
if ele in dict_left:
check.append(ele)
else:
if len(check) == 0:
return False
elif check[-1] != dict_right.get(ele):
return False
elif len(check) > 0 and check[-1] == dict_right.get(ele):
check.pop()
if len(check) != 0:
return False
else:
return True
结果
比我预料的要好很多。
思考
感觉可以不利用append或者pop,因为他们在底层并不是特别的简略的样子。
比如append()会重新复制原有列表再append,pop也同样会弄一个新的空间,如果是在列表开头部分,甚至需要移动每一个元素。
考虑利用索引来缓和这些内容造成的时间损耗。