zoukankan      html  css  js  c++  java
  • python---括号匹配

    """
    括号匹配
    
    输入: "()[]{}" 输出true
    输入:"([)]" 输出false
    输入:")(()))" 输出false
    输入:"()" 输出true
    输入:"((([])))" 输出true
    输入:"]][[" 输出false
    输入:([)] 输出false
    """
    
    
    def bracket_match_v1(brackets_str):
        brackets_dict = {'(': ')', '[': ']', '{': '}'}
    
        # 右括号开头
        if brackets_str[0] in brackets_dict.values():
            return False
    
        # 左括号开头
        brackets_stack = []
        for bracket in brackets_str:
            # 左括号进栈
            if bracket in brackets_dict.keys():
                brackets_stack.append(bracket)
    
            # 右括号 去匹配栈顶元素是否对应
            elif bracket in brackets_dict.values():
                if brackets_dict[brackets_stack.pop()] != bracket:
                    return False
    
        if not brackets_stack:
            return True
    
        return False
    
    
    def bracket_match_v2(brackets_str):
        """简化版"""
        brackets_dict = {')': '(', ']': '[', '}': '{'}
        brackets_stack = []
        for bracket in brackets_str:
            # 左括号
            if bracket in brackets_dict.values():
                brackets_stack.append(bracket)
            # 右括号, 包含右括号开头
            elif not brackets_stack or brackets_dict[bracket] != brackets_stack.pop():
                return False
    
        return not brackets_stack
    
    
    print(bracket_match_v1("()[]{}"))
    print(bracket_match_v1("([)]"))
    print(bracket_match_v1(")(()))"))
    print(bracket_match_v1("()"))
    print(bracket_match_v1("((([])))"))
    print(bracket_match_v1("]][["))
    print(bracket_match_v1("([)]"))
    
    print('-' * 66)
    
    print(bracket_match_v2("()[]{}"))
    print(bracket_match_v2("([)]"))
    print(bracket_match_v2(")(()))"))
    print(bracket_match_v2("()"))
    print(bracket_match_v2("((([])))"))
    print(bracket_match_v2("]][["))
    print(bracket_match_v2("([)]"))
    
    
    作者:凯旋.Lau
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    一、代码风格
    Nginx之Eclipse开发环境配置
    Linux之tail命令实时收集[纠正误解]
    Java之"Mozilla Rhino"引擎(二)
    linux之tail -F命令异常file truncated
    Java之nio性能比较
    Java之nio MappedByteBuffer的资源释放问题
    Java之java.lang.IllegalMonitorStateException
    Java之线程池管理
    Java之NIO传输数据
  • 原文地址:https://www.cnblogs.com/KX-Lau/p/12589626.html
Copyright © 2011-2022 走看看