括号匹配说明
算法思路
- 从左到右遍历字符串
- 如果不是括号,默认是有效字符,遍历下一个字符
- 如果是左括号,左括号进入栈,遍历下一个字符
- 如果是右括号
- 当前栈是否还有左括号
- 没有则匹配失败
- 有,出栈比较是否匹配
- 如果出栈的字符和当前字符匹配为一对括号,遍历下一个
- 不匹配,则匹配失败
- 遍历完毕后,判断栈中是否还有剩余左括号
python代码
def is_encode(str):
# 放左右括号的栈
bracket = '()'
open_brackets = []
close_brackets = [')']
# 见一个右括号就出一个左括号
for i in range(len(str)):
si = str[i]
# 如果不是括号,下一个
if bracket.find(si) == -1:
continue
# 如果是左括号就入栈
if si == '(':
open_brackets.append(si)
continue
# 走下下面说明就是右括号了,因为上面已经排除了不是字母和左括号了
if len(open_brackets) == 0:
# 现在来了个右括号,但是没有匹配的了
return False
#上面排除了各种情况,现在开始正常匹配了
p = open_brackets.pop()
if p =='(' and si ==')':
continue
else:
return False
#判断是否还有多余的左括号呀
if len(open_brackets) > 0:
return False
return True
网友评论