算法之堆栈

Posted yaoqingzhuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法之堆栈相关的知识,希望对你有一定的参考价值。

# 判断一个字符串中的有效括号()[]{}是否有效
def is_invalid(s):
    stack = []
    for i in s:
        # 遇到左括号,则添加到堆栈中
        if i == ( or i == [ or i == {:
            stack.append(i)
        else:
            # 遇到右括号, 先判断堆栈中是否有值, 如果没有,说明多了一个右括号, 直接返回False
            if len(stack) == 0:
                return False
            # 判断右括号与堆栈中的栈顶元素是否匹配,匹配则pop,否则返回False
            if (i == ) and stack[-1] == ( ) or (i == ] and stack[-1] == [) or (i == } and stack[-1] == {):
                stack.pop()
            else:
                return False
    return len(stack) == 0


if __name__ == __main__:
    print(is_invalid(1{}()[]))
    print(is_invalid({}()[]))

 

以上是关于算法之堆栈的主要内容,如果未能解决你的问题,请参考以下文章

在后台堆栈中多次防止相同的片段

算法之堆栈

从后台堆栈恢复片段时的 savedInstanceState

将新片段添加到后台堆栈是不是会暂停当前片段?

数据结构与算法之深入解析“最小栈”的求解思路与算法示例

从堆栈中弹出特定片段并删除其他片段