专栏首页算法与编程之美Python|判断各种括号的有效使用

Python|判断各种括号的有效使用

if len(string) > 2:

        print("false")

    if len(string) == 2:

        d =  ["()","{}","[]"]

        if string in  d:

            print("true")

         else:  

            print("false")

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

1.左括号必须用相同类型的右括号闭合。

2.左括号必须以正确的顺序闭合。

解决方案

思路:首先我们要讲我们输入的字符串中的括号提取出来到一个列表,然后判断是奇数个还是偶数个,奇数个一定不符合;如果是偶数,再遍历所有元素,因为括号在一起,通过以i和i+1的形式来确定符合的括号,再通过切片将符合的全部切去,将最后剩下的再来判断,将三种符号放入列表中,如果剩下的大于2个就无效,如果是两个并且在了列表中就有效。

首先我们通过一个for循环将我们输入的这个字符串中的括号提取出来,以通过建一个包含这些括号的列表然后挨个挨个的循环看是否每个元素属于这个列表,最后得到一个只含括号的列表,再将其转化为一个字符串然后进行后面的操作。

str = input("请输入一个包括 '(',')','{','}','[',']' 的字符串:") f = list() a = ["(",")","{","}","[","]"] for mmm in str: if mmm in a: f.append(mmm) cc= "".join(f)

先判断是否为奇数个

string =cc lenth = int(len(string)) if lenth % 2 == 1: print("false,只有奇数个字符")

如果这里为奇数个,就直接判断无效并且退出程序,因为符号一定是一一对应,奇数个便不能对应.如果为偶数,则跳开进入下面的程序。

if lenth % 2 == 0: for n in range(int(lenth)): for m in range(len(string) - 2): a = string[m] == "(" and string[m+1] == ")" b = string[m] == "[" and string[m+1] == "]" c = string[m] == "{" and string[m+1] == "}"

这里是在个数为偶数的情况下,先遍历所有的符号元素,然后加一个for循环,同时a,b,c分别是我们想要在这个字符串中判断的依据,代码意思是一组符号总是相邻存在。先设定好条件,然后再进行接下来的步骤。

if a or b or c: string = string[:m] + string[m+2:] break

这里,上面三个条件在for循环下随便满足一个就进行切片处理,将满足的两个符号前后的所有元素进行切片然后组合,就得到除去这组元素的另一个字符串。一直循环,直到没有满足条件的就跳出循环。

if len(string) > 2: print("false") if len(string) == 2: d = ["()","{}","[]"] if string in d: print("true") else: print("false")

然后接下来对剩下的进行判断,如果多余两个剩下,那就说明有多个未切片成功,就一定有相邻不匹配的,那么这个字符串无效。如果最后只剩下两个的话,我们不妨先设出一个包含3组正确顺序的列表,然后将我们切片剩下的字符串拿来比,如果剩下的在我们设的列表中的话,那么就说明是有效的,反之无效。

结语

解决字符串中类似循环删除问题的时候,我们可以利用切片,合并的功能。还有看到题目时一定要考虑有没有简单直接的方法能够帮忙理解,如本题的奇数个就可以直接判断出来。

实习编辑 | 王楠岚

责 编 | 李和龙

本文分享自微信公众号 - 算法与编程之美(algo_coding),作者:李和龙

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

原始发表时间:2020-01-31

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python|pygame基础之壁球游戏

    在学习编程的时候,由于算法训练的题目比较枯燥乏味,容易引起视觉疲惫,所以在这之余可以用编程写一些可视化的程序,比如今天小编给大家带来的pygame基础。其中会用...

    算法与编程之美
  • 前端|前后端分离模式的思考(二)

    随着目前的业务发展趋势,业务也越来越复杂。例如,一些页面交互效果,数据处理。传统的模式很难支持这样的业务场景。通过前后端分离,前端负责对应的交互业务,后端负责数...

    算法与编程之美
  • Python|字符串相关问题

    在python中经常遇到一些关于求字符串的问题,比如;找出最长回文字符串,找出字符串中不含重复字符的最长字符串,这时我们总是被这些问题给难住,该如何解决呢?

    算法与编程之美
  • 调度服务 ScheduledExecutorService 经常卡顿问题的排查及解决方法

    如上述代码所示,启动 10 个调度线程,延迟 10 秒,开始执行定时逻辑,然后每隔 2 秒执行一次定时任务。定时任务类为TaskWorker,其要做的事就是根据...

    CG国斌
  • 04Python基础之字符串Str

    字符串这玩意吧,主要是给人看的。您想一下,如果是计算机的它肯定更喜欢处理数值型数据了,实质上,字符串最后也被拆成一个个的字符来处理的,而字符也是转化成ASCII...

    讲编程的高老师
  • 吉日嘎拉DotNet.BusinessV4.2中的一处bug,及我的修复和扩展

    bug所在位置:DotNet.Business\Utilities\BaseManager.GetDataTableByPage.cs的函数

    崔文远TroyCui
  • PHP项目中最常用的函数

    php007
  • Tcl的字符串操作:比较字符串

    在Tcl中,可利用stringcompare命令对字符串进行比较。该命令需要接收两个字符串参数。如果第一个字符串在字典中先于第二个字符串,返回-1;如果第一个字...

    Lauren的FPGA
  • FormattableString 取代特定区域字符串

    有些软件系统是针对全球来开发的,因此一些字符串需要根据不同地区不同语言做出特定的处理。如果针对不同地区不同用语言分别编写字符串处理方法的话代码量是巨大的。那么这...

    喵叔
  • Python 3.7.0 笔记(不完整)

    Python break语句,就像在C语言中,打破了最小封闭for或while循环。 break语句用来终止循环语句,即循环条件没有False条件或者序列还没...

    py3study

扫码关注云+社区

领取腾讯云代金券