括号匹配

问题

假设表达式中允许包含3种括号()[]{},其嵌套顺序是是正确的。
编写一个函数,判断一个表达式字符串,括号匹配是否正确

例如:
{()[()]}这样的格式是正确的,
[{),[()),(()}这样的格式不正确

Python代码示例

# !/usr/bin/env python
# -*-encoding: utf-8-*-
# author:LiYanwei
# version:0.1


# 表示左括号和用括号
left = ['(','[','{']
right = [')',']','}']

def match(expr):
    '''
    括号的匹配算法:
    遍历传入表达式的每个字符,如果是左括号压入栈中,如果是右括号时,判断栈是否为空,为空说明False,不为空判断是否匹配,不匹配False,匹配True
    :param expr:表达式
    :return:返回
    '''
    # 1.建立一个空栈,用来保存还未找到匹配的做括号
    s = []
    # 2.遍历表达式中的每个字符
    for c in expr:
        # 如果是左括号,入栈
        if c in left:
            s.append(c)
        # 如果右括号包含两种情况
        elif c in right:
            # 栈为空,则表达式错误,返回False
            if not s:
                return False
            # 如果栈不为空,判断c和栈定元素是否匹配(通过Assic码的差值判断,不再1到2之间的,表达式错误,返回False)
            if not 1 < ord(c) - ord(s[-1]) <= 2:
                return False
            # 最后一种情况匹配,清除所有元素
            s.pop()
            return True

print match('{[]})')


原文地址:https://www.cnblogs.com/Py00/p/7697500.html