Python通过栈方式实现括号匹配

声明:参考B站视频,自学成长记录
https://www.bilibili.com/video/BV1VC4y1x7uv?from=search&seid=12619305018182705301

思路:

通过传入参数的长度进行遍历
从左到右依次取括号
如果是左括号, 则入栈
如果是右括号, 则从栈顶移除一个左括号
如果是右括号且栈内为空, 则不继续匹配并判定匹配失败
当所有遍历操作完成后且栈内为空, 则括号成对匹配成功

from pythonds.basic.stack import Stack


def checker_brackets(brackets):
    """
    通过栈方式匹配括号是否成对出现
    :param brackets:传入参数
    :return: 返回匹配结果True/False
    """
    s = Stack()         # 初始化栈
    balanced = True     # 继续标识
    index = 0           # 计数器

    # 遍历传入参数并进行相应的栈入栈出操作
    while index < len(brackets) and balanced:
        symbol = brackets[index]    # 获取传入参数对应下标的值

        # 判断是否为(
        if symbol == "(":
            s.push(symbol)          # 将匹配到的( 入栈

        # 不为( , 则匹配到 )
        else:
            if s.isEmpty():         # 如果匹配到 ),且栈内为空
                balanced = False    # 将继续标识置为False
            else:
                s.pop()             # 如果栈内不为空,弹出并删除栈顶一个 (

        index += 1                  # 计数器 + 1

    # print(balanced)
    # 如果一直继续到最后且栈内为空
    if balanced and s.isEmpty():
        return True                 # 则括号成对匹配成功
    else:
        return False                # 则括号成对匹配失败


print(checker_brackets("((())))"))           # False
print(checker_brackets("((()))"))            # True
print(checker_brackets("(()))"))             # False

你可能感兴趣的:(Python,数据结构与算法,栈)