热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DAY005--符号成对判断(栈的思想)

005题目如下:给定一个字符串,里边可能包含“()”、{}、“[]”三种括号,请编写程序检查该字符串的括号

005 题目如下:                                          

给定一个字符串,里边可能包含“()”、"{}"、“[]”三种括号,请编写程序检查该字符串的括号是否成对出现。
输出:
  true:代表括号成对出现并且嵌套正确,或字符串无括号字符。
  false:未正确使用括号字符。

 

流程分析:                                                                    

如果了解数据结构,那么应该知道,简单的采用一个栈的特性,就能解决该问题,左括号栈顶字符必须和第一个入栈的右括号字符匹配。

  • 栈介绍:栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。
  • 栈的特性:后进先出(LIFO)

 

下面用一幅流程图来说明程序运行步骤:

 

 

1、先定义一个栈,把符号写成一个字典的形式,分别定义左符号、右符号

2、判断字符串中是否有左符号,如果有,加入栈列表

3、判断字符串中是否有右符号,如果有:

  3.1、如果栈不为空,并且右符号是栈列表中最后一个值得右符号,删除栈列最后一个值,用pop方法

  3.2、不满足情况,则返回False

4、返回 not 栈--也就是栈为空的话,返回为True,如果栈列表为空,返回False  (将剩余的有值的栈列错误排除掉)

 

代码分析:                                                                            

BRANKETS={">":"<",")":"(","}":"{"}
BRANKETS_LEFT=BRANKETS.values()
BRANKETS_RIGHT=BRANKETS.keys()


def branket_check(str):
    stack=[]
    for char in str:
        if char in BRANKETS_LEFT:
            stack.append(char)
        if char in BRANKETS_RIGHT:
            if stack and stack[-1]==BRANKETS[char]:
                stack.pop()
            else:
                return False
    return not stack
def main():
    s=input("输入您要查询的字符串:")
    if branket_check(s):
        print("\033[32m符号是成对出现的\033[0m")
    else:
        print("\033[31m符号不是成对出现的!\033[0m")

if __name__ == '__main__':
    main()

 

题目反思:                                                                             

1、BUG总结:

list=[1,2,3]
print(list.pop([-1]))

TypeError: 'list' object cannot be interpreted as an integer

BUG原因:

BUG1:删除列表最后一个值,我写了stack.pop([-1]),程序一直报错

BUG2:并没有考虑到会有stack还有一些没有删除的左符号的情况,所以得到结果和实际结果不一致

 

BUG解决:

BUG1:stack.pop() 直接就是删除列表中最后一个值,或者写成:stack.pop(-1),这样表达式:stack.pop([-1]) 是错误的

BUG2:最后的程序返回值不应该是return True/False,而应该是 return not stack

 

新学知识点:                                                                          

1、第一次了解到栈列的思想,栈:后进先出,并且只允许栈顶操作,不允许栈底操作

2、学会如何判断看符号是不是成对出现,对以后成双成对出现的某些字符串的判断操作会有一些思路

 

Mark on 2018.04.07


推荐阅读
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了汉诺塔问题的迭代算法实现,通过递归的方式将盘子从一个地方搬到另一个地方,并打印出移动的顺序。详细介绍了算法的思路和步骤,以及示例代码的运行结果。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
author-avatar
哒Dayling玲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有