【LeetCode】20. 有效的括号

158 阅读2分钟

image.png

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

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

有效字符串需满足:

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

示例 1:

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

示例 2:

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

示例 3:

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

示例 4:

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

示例 5:

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

提示:

1 <= s.length <= 104

s 仅由括号 '()[]{}' 组成

二、思路分析:

作为一个测试编程小白来说,这题好简单阿,脑袋会了,手不会........

饶饶小脑袋,苦思冥想一番,想到的解决办法:

  • 从长度判断:只要字符串长度是奇数,则结果直接返回False

    image.png

  • 判断括号有效:

    • 使用字典:把成对的括号建立,映射关系key-value,例如")":"("。

      image.png

    • 使用栈的思想与列表结合:先进后出原则,遍历字符的字符。

      • 当字符串字符不在dict.key()时,则会添加到list中

      image.png

      • 当字符串字符在dict.key()并且list不为空时,dict[key] 与list[-1]进行比较

      image.png

根据以上思路,我们尝试写下如下代码如下所示:

class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """

        Length = len(s)

        brackets  = {")":"(","]":"[","}":"{"}

        stack = []

        if Length % 2 !=0:
            return False

        for index in s:

            if stack and index in brackets:

               if stack[-1] == brackets[index]: 
                   
                   stack.pop()
               else:
                   return False
            else:
                stack.append(index)
        
        return True
        
       if len(stuck) == 0: 
           return True 
       else: 
           return False

三、测试类编写:

作为测试人员,对于代码的正确性,我们要进行测试和检验的,最常见方法:等价类划分和边界值法。

按照题目要求,我们对测试数据进行如下划分:

image.png

提交代码,查看结果如下,AC掉一道基础题,(^-^)V

image.png

四、总结:

本题主要考察的是栈思维和映射关系的转换。当我们遇到类似的可以借鉴这个思维。

以上是本期内容,欢迎大佬们点赞评论,下期见~~