字符串的括号匹配(python)

括号匹配说明

  • 本方法字符串中只有 () 括号

算法思路

  • 从左到右遍历字符串
  • 如果不是括号,默认是有效字符,遍历下一个字符
  • 如果是左括号,左括号进入栈,遍历下一个字符
  • 如果是右括号
    • 当前栈是否还有左括号
    • 没有则匹配失败
    • 有,出栈比较是否匹配
  • 如果出栈的字符和当前字符匹配为一对括号,遍历下一个
  • 不匹配,则匹配失败
  • 遍历完毕后,判断栈中是否还有剩余左括号
    • 没有,匹配成功
    • 有,说明有多余左括号,匹配失败

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容