问题
假设表达式中允许包含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('{[]})')