Leetcode_20【有效的括号】

文章目录:

  • 题目
  • 脚本一
  • 脚本一逻辑

题目:

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true
示例 2:

输入: "()[]{}"
输出: true
示例 3:

输入: "(]"
输出: false
示例 4:

输入: "([)]"
输出: false
示例 5:

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


脚本一:【用时:32ms】

class Solution:
    def isValid(self, s: str) -> bool:
        zidian1 = {')':'(',']':'[','}':'{'}
        lists = list(s)
        flag = 'bb'
        i = 0
        while lists:
            try:
                lists[i]
            except IndexError:
                return(False)
            num1 = len(lists)
            if lists[i] in zidian1:
                if lists[i-1] and lists[i-1] == zidian1[lists[i]]:
                    del lists[i]
                    del lists[i-1]
                    i -= 1
                else:
                    return(False)
                    flag = 'xx'
            else:
                i += 1
                if i >= num1:
                    flag = 'xx'
                    return(False)
        if flag == 'bb':
            return(True)

脚本一逻辑:

  • 确实惭愧,此题是笔者想了两天时间才想到这种处理逻辑
  • 此题的主要逻辑是:
    • 有效括号势必有这样的规律:字符串从左往右开始数起,第一个右括号比如"]""}"")",它的左边必定为相匹配的左括号;
    • 基于如上的原则,只需要将符合此原则的括号从原字符串中去除
    • 为了去除方便,可将字符串转换为列表的方式
    • 若遇到不符合此规律的,则不是有效的括号 
原文地址:https://www.cnblogs.com/mailong/p/12037774.html