栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

有效的括号--python

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

有效的括号--python

20. 有效的括号

难度简单2765

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

示例 1:

输入:s = "()"
输出:true

示例 2:

输入:s = "()[]{}"
输出:true

示例 3:

输入:s = "(]"
输出:false

示例 4:

输入:s = "([)]"
输出:false

示例 5:

输入:s = "{[]}"
输出:true

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

通过次数834,613提交次数1,874,359

我的解题思路:

  • 利用堆栈的思想,遇见左括号就要加入堆
  • 遇见右边括号就匹配
  • 匹配成功就出堆
  • 匹配不成功就返回错误
  • 其中要注意的是:匹配的时候要判断堆里面有没有元素,如果没有就返回错误

我的代码:

class Solution:
    def isValid(self, s: str) -> bool:
        ls_symbol = ['(', '{', '[']
        ls_symbol_re = [')', '}', ']']
        stack = []
        t = -1
        s_len = len(s)

        #开始遍历
        for i in range(s_len):
            #如果是左括号,则添加到堆
            if ls_symbol.count(s[i]) == 1:
                stack.append(ls_symbol_re[ls_symbol.index(s[i])])
                t += 1
            #如果不是左括号 ,就进行比较(注意要判断是否出现指针越界的情况),如果比较有匹配,就成功
            elif t >= 0 and s[i] == stack[t]:
                t -= 1
                stack.pop()
            # 如果不是左括号 ,就进行比较(注意要判断是否出现指针越界的情况),如果比较没有有匹配,就失败
            elif t >= 0 and s[i] != stack[t]:
                return False
            #指针越界,则是非法匹配
            elif t < 0:
                return False
        if t >= 0 :
            return False
        return True

总结:

代码很简单,但是还是一句话,容易粗心,总结了以下几种原因:

  1. 不熟练
  2. 逻辑不清晰

解决方法:

  1. 写代码要注释
  2. 注释要考虑各种分支可能存在情况之后再编码

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/529956.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号