zoukankan      html  css  js  c++  java
  • 数据结构中,用Python 解决各种括号匹配疑难杂症

    本文主要是解决括号匹配的问题。

    整体实现思路:借助Python 的List 来实现 ,因为列表的Append 方法相当于栈的Push 方法即栈的压入,列表的Pop 方法相当于栈的Pop 方法即弹出。

    详细的思路

    首先,设置一个字典,用于存放我们要遍历的符号类型。

    其次,是设置两个列表分别存放的是各种括号的开括号和闭括号,然后遍历给定的字符串,分如下几种情况:

    • 字符串为空时直接输出True

    • 字符串的符号不成对匹配时输出False

    • 字符串中的符号不是字典中的符号类型时,直接忽略

    • 遍历字符串,将正向的符号压入栈内,遍历到的字符如果是正向符号(正好是最近的一个符号时)的匹配内容就弹出栈

    代码实现如下

     1 #定义要检查匹配的符号类型
     2 brackets = {'}': '{', ']': '[', ')': '(', '>': '<'}
     3 #将符号的正反向进行分类
     4 bracket_l, brackets_r = brackets.values(), brackets.keys()
     5  
     6 #定义一个检查字符串的方法
     7 def check(str1):
     8     alist = [] #定义一个空列表
     9     for c in str1:
    10         if c in bracket_l:
    11             alist.append(c)#将左符号压入栈内
    12         elif c in brackets_r:#右符号要么出栈,要么匹配失败,不做处理
    13             if alist and alist[-1] == brackets[c]:#判断alist不会空且alist最后一个字符等于左符号对应的右符号时
    14                 alist.pop() #就做出栈操作
    15             else:
    16                 return False
    17     return True #传入空的字符串直接返回true
    18  
    19 if __name__ == '__main__':
    20     print(check("6c[*]{7b +[(8e -s3) * (d4+t5)]}<<>>"))
    21     print(check("6c*{7b+ [8e- 9f]}<>"))
    22     print(check(""))

    温馨提示:在阅读本文前可以提前看一看栈的上上篇文章《Python 之“栈为何物”》,因为本文是在这篇文章的基础上进行的应用,这里面的实现逻辑非常有意思,同时也体现了算法的精妙之处,值得大家一探究竟。

    欢迎关注【无量测试之道】公众号,回复【领取资源】,
    Python编程学习资源干货、
    Python+Appium框架APP的UI自动化、
    Python+Selenium框架Web的UI自动化、
    Python+Unittest框架API自动化、

    资源和代码 免费送啦~
    文章下方有公众号二维码,可直接微信扫一扫关注即可。

    备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

     添加关注,让我们一起共同成长!

  • 相关阅读:
    磁盘及分区管理
    用户和文件权限管理
    分割文件命令split
    去除重复命令uniq
    数据连接命令join
    数据剪切命令cut和数据粘贴命令pastte
    排序命令sort
    koa-router
    koa入门
    require.ensure的用法;异步加载-代码分割;
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/13637898.html
Copyright © 2011-2022 走看看