专栏首页测试技术圈测试开发面试题解

测试开发面试题解

新书

速递

吴老的java版《selenium webdriver3 实战宝典》和python版《selenium Webdriver 3.0 自动化测试框架实战指南》出版了,代码拿来就能用。

文 | 李兴

题目描述

给定一个由括号元素'(', ')','[':,']', '{', '}'组成的字符串,判断该字符串中的所有类型的括号是否是闭合的。

判断条件:

(1)左括号必须用相同类型的右括号闭合

(2)左括号必须以相同的顺序闭合

示例:

输入:() 输出:true

输入:()[]{} 输出:true

输入:(] 输出:false

输入:([)] 输出:false

输入:([{}]) 输出:true

输入:((())) 输出:true

输入:([[()()]{}]){}[] 输出:true

解题分析一

通过观察示例中的字符串发现,一个符合括号闭合要求的字符串有如下特点:

(1)合理的嵌套关系

(2)嵌套的最内层是一对闭合的括号类型(相邻两个元素),如()

首先将字符串string转换成列表string_list,然后判断列表string_list当中是否存在相邻字符为闭合括号的情况,如果存在就删除这两个字符,然后继续判列表string_list当中是否存在相邻字符为闭合括号的情况。直到string_list为空,或者没有可以删除的元素为止。

如果string_list能够删除为空,为真,否则为假

此题的解法类似于我们玩的消消乐,如果能够全部消除,则通关

算法

def isClosedParentheses(string):
   '''
    判断一个由括号组成的字符串是否是闭合的
   '''
    d= {'(': ')', '[': ']', '{': '}'}
   string_list = list(string)
   while string_list:
       for i in range(len(string_list)-1): # 获取所有列表的下标
           if string_list[i] in d.keys() and d[string_list[i]] == string_list[i +1]:# 找到闭合的括号
                string_list.pop(i) # 先删除闭合括号的左边,然后该下标右边,下标左移
                string_list.pop(i) # 左移完成后,闭合括号的右边,左移到该下标继续删除
                break # 找到闭合括号后退出本次循环
       else:
           break # for循环完成后退出while循环
            #验证列表是否全部删除
   if string_list:
       return False
   else:
       return True

考点

1、列表元素删除

2、for…else…语法结构

解题分析二

  1. 给出的括号字符串,一定存在一对正确的括号,如:(),[],{}
  2. 将这一对有效括号清除掉,这对括号外的括号就成为中间成对出现的括号,
  3. 这样一直清除下去,这个字符串如果清除完毕就是True,否则为False

算法

def isClosedParentheses(string):
   '''
    判断一个由括号组成的字符串是否是闭合的
   '''
   while '{}' in s or '()' in s or '[]' in s:
           s = s.replace('{}', '')
           s = s.replace('[]', '')
           s = s.replace('()', '')
       return s == ''

本文分享自微信公众号 - V社 北京社(SoftwareTesters)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • DevOps 中高效测试基础架构的最佳实践

    今天我主要讲四个内容,我做内容规划的时候其实内容偏多,对于一些通用的内容可以讲得快一点,干货部分会讲得仔细一点。

    Criss@陈磊
  • Jenkins集成必会技能——pipeline入门教程

    什么是Pipeline?简单来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复...

    Criss@陈磊
  • 基于 Docker 的 Jenkins 持续集成与持续部署

    基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化。

    Criss@陈磊
  • [Go] 转换编码处理网页显示乱码

    在进行抓取网页或者获取一个网页的时候,有时会因为编码问题变成乱码,下面的函数可以转换一下编码

    陶士涵
  • LintCode-212. 空格替换

    设计一种方法,将一个字符串中的所有空格替换成 %20 。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。

    悠扬前奏
  • cocos2d-js 各浏览器上的表现

    用户1258909
  • MHA选择主库源码解析

    MHA在选择新的主库之前,会先把活着的slave分为几个数组,分别为latest(最靠前的slave数组),pref(优先被选择为master的数组),bad(...

    [3306 Pai ] 社区
  • 机器学习(34)之BIRCH层次聚类详解

    关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第一 【Python】:排名第三 【算法】:排名第四 前言 在K-Means算法(机器学习...

    昱良
  • BIRCH聚类算法原理

    在这篇博文中,我们来探讨循环网络模型和前馈模型之间的取舍。前馈模型可以提高训练稳定性和速度,而循环模型表达能力更胜一筹。有趣的是,额外的表现力似乎并没有提高循环...

    机器学习算法工程师
  • BIRCH聚类算法原理

        在K-Means聚类算法原理中,我们讲到了K-Means和Mini Batch K-Means的聚类原理。这里我们再来看看另外一种常见的聚类算法BIRC...

    刘建平Pinard

扫码关注云+社区

领取腾讯云代金券