匹配括号算法(Stack)

Stack应用练习:判断括号串中的括号是否匹配

在做括号匹配之前需要使用数据结构——栈(Stack)来完成请参照博客python实现Stack,当然,为了方便使用,我把以列表尾部作为栈顶实现栈的代码放在这边。

class Stack(object):
    """以列表尾部为栈顶"""
    def __init__(self):
        self.items = []

    def is_empty(self):
    	# 是否为空
        return self.items == []

    def push(self, item):
    	# 压栈
        self.items.append(item)

    def pop(self):
    	# 弹栈
        self.items.pop()

    def peek(self):
    	# 获取栈顶元素
        return self.items[len(self.items) - 1]

    def size(self):
    	# 获取栈的元素数量
        return len(self.items)

算法分析

每一个左括号都有一个右括号匹配,第一个位置所在的左括号所匹配的右括号在最后一位,这里通过遍历字符串并跳过与括号无关的字符,遇到左括号将其压栈,如果遇到右括号则进行弹栈,弹出最后压入的左括号,如果栈中所有的左括号都可以匹配右括号,并且括号没有多余,那整个括号串就是匹配的,反之则不匹配。

# 导入自定义栈Stack
from Stack import Stack

# 定义匹配括号函数
def parChecker(symbolString):
    s = Stack()  # 创建Stack对象
    balanced = True  # 定义变量balance标识左右括号的数量是否平衡
    index = 0
    while index < len(symbolString) and balanced:
        symbol = symbolString[index]
        # 跳过括号之外的所有字符
        if symbol not in ['(', ')']:
            index += 1
            continue
        if symbol == '(':
        	# 左括号入栈
            s.push(symbol)
        else:
            if s.is_empty():
                balanced = False
            else:
            	# 遇到右括号,左括号出栈
                s.pop()
        index += 1

    if balanced and s.is_empty():
        return True
    return False


print(parChecker("print('%d,%10.3f,%10.3f' % (i, lst_time, d_time))"))
# True
print(parChecker("print('%d,(%10.3f,%10.3f' % (i, lst_time, d_time))"))
# False
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jiucheng18

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值