鱼C论坛

 找回密码
 立即注册
楼主: 小甲鱼

[技术交流] 括号匹配(栈的应用)

  [复制链接]
发表于 2018-8-9 19:33:52 | 显示全部楼层
VBVCBCVBCVGDFGDFGDFGCCV
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-17 15:50:09 | 显示全部楼层
qq792005991 发表于 2013-3-25 22:46
隐藏内容是源码呢?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-27 09:33:16 | 显示全部楼层
查看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-20 12:33:38 | 显示全部楼层
支持小甲鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-28 17:10:48 | 显示全部楼层
甲鱼牛逼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-7 14:42:43 | 显示全部楼层
学习下小甲鱼老师的精神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-10 19:25:32 | 显示全部楼层
可见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-16 17:12:02 | 显示全部楼层
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-19 21:59:27 | 显示全部楼层
太好了可以写实验报告了呜呜呜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-3 23:26:19 | 显示全部楼层
原来如此。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-16 22:05:03 | 显示全部楼层
感谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-25 10:00:13 | 显示全部楼层
看一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-15 07:18:27 | 显示全部楼层
q
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-17 17:27:05 | 显示全部楼层
我想看代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-14 09:59:29 | 显示全部楼层
不错~~~~~~~~~~~~~~~~~~~~~~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-4-24 21:27:33 | 显示全部楼层
学习啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-29 13:03:55 | 显示全部楼层
我又太高看自己了,本以为很简单,结果让自己脑子抽筋了一天才搞定
#deep是递归深度控制标识,不用改。
def dc(s,deep=0):
    #定义一个左括号游标i
    i = 0
    while True:
        #首先检测有没有左括号
        if s[i] in ['{','[','(']:
            #记录左括号的类型left
            left = s[i]
            #再新定义一个右括号的游标j
            j = i + 1
            while True:
                #当检测到左括号后紧接着检测右括号
                if s[j] in ['}',']',')']:
                    right = s[j]
                    #如果右括号也检测到,则检测两个括号是否匹配
                    if left+right == '()' or left+right == '[]' or left+right == '{}':
                        #确定匹配后再判断当前递归深度,不是在最外层返回当前的层级长度。
                        if deep > 0:
                            return j
                        #在最外层,把左括号游标定位到当前位置,从当前位置往后再继续检测
                        i = j
                        #右括已经找到,退出重新检测左括号
                        break
                    else:
                        #如果左右两括号不匹配则返回False
                        return False
                #没有找到右括号反而找到了左括号,则进入递归。
                elif s[j] in ['{','[','(']:
                    #递归深度加一
                    deep = deep + 1
                    #进入递归,返回内层的长度或者返回False
                    next_back = dc(s[j:],deep)
                    #退出递归后把深度减一
                    deep = deep - 1
                    #返回False说明内层左右括号不匹配,向上一层抛False
                    if not next_back:
                        return False
                    #如果内层括号匹配,则把右括号游标向右移动内层的长度。
                    else:
                        j = j + next_back
                #没有找到右括号就向右移动游标
                j += 1
                #判断当前右括号游标是否越界,如果越界说明缺少右括号,向上抛False
                if j >= len(s):
                    return False
        #如果在没有左括号的情况下先检测到了右括号则返回False
        elif s[i] in ['}',']',')']:
            return False
        #没有找到左括号就向右移动游标
        i += 1
        #判断当前左括号游标是否越界,如果越界说明没有左括号,返回True
        if i >= len(s):
            return True
print(dc(input('请输入带N多个括号的字符串:')))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-18 20:50:55 | 显示全部楼层
k
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-15 19:28:07 | 显示全部楼层
啊啊啊啊啊枚金币咋办
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-16 09:40:28 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 11:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表