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也同样会弄一个新的空间,如果是在列表开头部分,甚至需要移动每一个元素。

  考虑利用索引来缓和这些内容造成的时间损耗。

posted @ 2022-08-19 15:57  小澳子  阅读(30)  评论(0编辑  收藏  举报