python-数据结构-栈-括号匹配

括号匹配

   从空栈开始,从左到右处理括号字符串。如果一个符号是一个开始符号,将其作为一个信号,对应的结束符号稍后会出现。另一方面,如果符号是结束符号,弹出栈,只要弹出栈的开始符号可以匹配每个结束符号,则括号保持匹配状态。如果任何时候栈上没有出现符合开始符号的结束符号,则字符串不匹配。最后,当所有符号都被处理后,栈应该是空的。

    在 Python 中,方括号 [ 和 ] 用于列表,花括号 { 和 } 用于字典。括号 ( 和 ) 用于元祖和算术表达式。只要每个符号都能保持自己的开始和结束关系,就可以混合符号。。符号字符串如

{ { ( [ ] [ ] ) } ( ) }

[ [ { { ( ( ) ) } } ] ]

这些被恰当的匹配了,因为不仅每个开始符号都有对应的结束符号,而且符号的类型也匹配。相反这些字符串没法匹配:

( [ ) ]

[ { ( ) ]

from python_basic_stack.stack_definition import Stack


def matches(open, close):
    # top symbol
    opens = "([{"
    closers = ")]}"
    # 对比下标位置是否相同
    return opens.index(open) == closers.index(close)


# 定义一个符号匹配函数
def symbolmatch(symbolString):

    # 初始化一个栈
    s = Stack()

    balanced = True
    # 初始下标
    index = 0

    # 遍历symbolString  {{([][])}()}   [{()]
    while index < len(symbolString) and balanced:

        symbol = symbolString[index]

        if symbol in "([{":
            s.push(symbol)
        else:
            print(s.list1())
            if s.isEmpty():
                balanced = False
            else:
                # 输出栈顶
                top=s.peek()
                print(top)
                s.pop()
                if not matches(top, symbol):
                    balanced = False
        index += 1

    if balanced and s.isEmpty():
        return True
    else:
        return False


print(symbolmatch('{{([][])}()}'))
print(symbolmatch('[{()]'))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值