• 括号匹配


    问题

    假设表达式中允许包含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('{[]})')
    
    
    
  • 相关阅读:
    单链表的反转是常见的面试题目
    线程状态
    史上最强Android只是总结
    常见的一些算法
    Android LayoutInflater.inflate()使用详解
    Android事件分发机制及滑动冲突解决方案
    Kotlin——高阶函数详解与标准的高阶函数使用
    Kotlin 中的伴生对象和静态成员
    知识点
    Android Studio:多包名打包
  • 原文地址:https://www.cnblogs.com/Py00/p/7697500.html
Copyright © 2020-2023  润新知