双针模型:验证括号,特殊case处理

我们知道双针:一般形式,两个指针都从左到右扫描,或者一头一尾两边朝中间扫描,或者在两个数组里扫描

验证括号,这个问题:一个指针扫描当前数组,另一个指针指向的是栈顶元素,也是双针模型的一种变形。

从这里例子,我们还需要学习一下,编码完毕之后,注意检查特殊的case,让程序perfect!!

代码实现如下:

# -*- coding: utf-8 -*-

# 用于右括号和左括号匹配
def left(a):
    if a == '}':
        return '{'
    if a == ']':
        return '['
    if a == ')':
        return '('
# 验证括号 
def checkNotation(arr):
    num = len(arr)
    # 特殊case处理
    if num == 0:
        return False
    # 用于存放左括号
    stack =[]
    # 遍历所有的元素
    for pos in range(num):
        # 遇到左括号,就直接放入栈里
        if arr[pos] =='{' or arr[pos] =='[' or arr[pos] =='(':
            stack.append(arr[pos])
        # 遇到右括号,考虑是否匹配 
        else :
            # 把栈顶的元素和当前的是否匹配,匹配的话,弹出栈顶元素,消除
            # 判断stack是否为空为特殊case处理
            if stack and stack[-1] == left(arr[pos]):
                stack.pop()
            else:
                return False
    # 特殊case处理
# if stack: 
# return False
# else:
# return True
    # 上述4行可以简化成如下
    return not stack
                
specialCase = [')',')']
print(checkNotation(specialCase))
tureCase = ['{','[',']','(',')','}']
flaseCase = ['{','[',']','(',']','}']
print(checkNotation(tureCase))
print(checkNotation(flaseCase))


runfile('D:/share/test/check_().py', wdir='D:/share/test')
False
True
False
点赞